다형성

방세현·2023년 3월 28일
0

java

목록 보기
1/8

다형성이란 부모클래스의 타입의 참조변수로 자식클래스의 인스턴스를 참조할 수 있도록 하는 것이다.

class Parent{
	int parent_int;
    
    void par();
}

class Child extends parent{
	int child_int;
    
    void chi();
}

다음과 같이 부모 클래스 타입의 참조변수로 자식 클래스의 인스턴스를 참조하는 것이 가능하다.

Parent p = new Child();

그렇다면 아래와 같이 인스턴스를 같은 타입의 참조변수로 참조하는 것과 위의 코드는 어떤 차이가 있을까?

Child c = new Child();

Parent타입의 참조변수 p는 Parent클래스의 맴버들만 사용할 수 있다. (parent_int, par())
하지만 Child타입의 참조변수 c는 Parent클래스의 맴버와 Child클래스의 맴버 모두 사용할 수 있다. (parent_int, par(), child_int, chi())

즉, 참조변수가 사용할 수 있는멤버의 개수는 인스턴스의 멤버 개수보다 같거나 적어야 한다.

Parent p ⊂ new Child();

조상 타입의 참조변수로 자손타입의 인스턴스를 참조할 수 있다.
반대로 자손타입의 참조변수는 조상타입의 인스턴스를 참조할 수 없다.

메서드의 경우 부모 클래스의 메서드를 자식 클래스에서 오버라이딩한 경우 참조변수의 타입에 관계없이 항상 실제 인스턴스의 메서드(오버라이딩된 메서드)가 호출되지만, 멤버변수의 경우 참조변수의 타입에 따라 달라진다.

classBindingTest {
	public static void main(){String[] args){
    	Parent p = new Child();
        Child c = new Child();
        
        System.out.println("p.x = " + p.x);
        p.method();
        System.out.println("c.x = " + c.x);
        c.method();
    }
}

class Parent {
	int x = 100;
    
    void method() {
    	System.out.println("Parent Method");
    }
}

class Child extends Parent {
	int x = 200;
    
    void method() {
    	System.out.println("Child Method");
    }
}

실행결과
p.x = 100
Child Method
c.x = 200
Child Method

변수는 참조변수의 타입에 따라 달라진다.
메서드는 오버라이딩한 경우 자식클래스의 메서드를 사용한다.

0개의 댓글