다형성, 참조변수

Woongbin·2022년 7월 13일
0

Java 기초

목록 보기
9/17
post-thumbnail

다형성(polymorphism)

부모-자식 상속 관계에 있는 클래스에서 상위 클래스가 동일한 메시지로 하위 클래스들을 서로 다르게 동작시키는 객체 지향 원리.

동적 바인딩

메소드가 실행 시점에서 성격기 결정되는 바인딩.

다형성 장점

  1. 유지보수가 쉽다
  2. 재사용성 증가
  3. 느슨한 결합

다형성 필수 조건

  1. 상속 관계 : 부모-자식 간 클래스 상속
  2. 오버라이딩 필수 : 하위 클래스 메소드가 반드시 재정의
  3. 업캐스팅 : 자식 클래스의 객체가 부모 클래스 타입으로 형변환

다형성 구현 방법

  1. 상속 클래스 구현
  2. 메소드 오버라이딩
  3. 업캐스팅하여 객체 선언
  4. 부모 클래스 객체로 자식 메소드 호출
class Parent { ... }
class Child extends Parent { ... }
...
Parent pa = new Parent(); // 허용
Chile ch = new Child(); // 허용
Parent pc = new Child(); // 허용
Chile cp = new Parent(); // 오류

참조변수의 형변환(객체 형변환)

사용할 수 있는 멤버의 개수를 조절하는 것.

※ 부모-자식 관계의 참조변수는 서로 형변환 가능(단 자손끼리는 불가능)

public class Car {
	public void run() {
		System.out.println("Car의 run메소드");
	}
}
public class Bus extends Car {
	public void ppang() {
		System.out.println("빵");
	}
}

main에서 ppang메소드를 호출하고 싶으면 Bus타입의 참조변수로 참조해야 함.

public class BusExam {
	public static void main(String args[]) {
    	Car car = new Bus();
        car.run();
        
        Bus bus = (Bus)car;
        bus.run();
        bus.ppang();
    }
}

참조변수와 인스턴스 연결

public class Main {
    public static void main(String[] args) {
	    Parent p = new Child();
	    Child c = new Child();
        
        System.out.println(p.x); // 200
        System.out.println(c.x); // 100
        p.method(); // Child method
        c.method(); // Child method
    }
}
class Parent {
    int x = 200;
    void method(){
        System.out.println("Parent Method");
    }
}
class Child extends Parent { // Child 자식 Parent 부모
    int x = 100;
    void method(){
        System.out.println("Child Method");
    }
}

여러 종류의 객체를 배열로 다루기

부모타입의 배열에 자식들의 객체를 담을 수 있음.

Product p[] = new Product[3];
p[0] = new TV();
p[1] = new Computer();
p[2] = new Audio();

여기서 배열에는 실제 객체를 저장하는게 아니라 참조변수를 저장하기 위한 것으로 인스턴스의 주소가 저장된다.

0개의 댓글