다형성을 공부하고있었다,,,
다형성이란? 상속관계에서 조상클래스 타입으로 자식클래스 객체를 정의하는것
즉 다음과 같다
Idol aespa = new Aespa();
위와같이 형변환을 할 경우, 접근할 수 있는 내용이 달라진다.
어떻게?
| 하위타입을 상위타입으로 형변환 할 경우 (묵시적 캐스팅)
Idol aespa = new Aespa();
자손타입을 조상타입으로 참조 할 경우 형변환 생략이 가능하다.
| 상위타입을 하위타입으로 형변환 할 경우 (명시적 캐스팅)
Idol aespa = new Aespa();
Aespa aespa2 = (Aespa)aespa;
조상타입을 자손타입으로 참조할경우 형 변환 생략이 불가능하다.
또한 조상은 무작정 자손으로 바꿀 수 없다. 위처럼 조상타입으로 형변환 됐던 자손타입의 경우에나 가능하다...
그럼 이제 문제는 이렇게 형변환 했을때 내가 사용할 수 있는 멤버는 대체 누구의 멤버일까? 이다. 이때 정적바인딩과 동적바인딩이 등장한다.
class Parent {
private int id;
protected int name;
public void test(){
System.out.println("부모메소드");
}
}
class Child extends Parent {
private int id;
protected int name;
public void test(){
System.out.println("자식메소드");
}
}
class Main{
Parent p = new Child();
p.id //private이라 불가능함
p.name //부모메소드의 name 실행
p.test(); //자식메소드의 test()실행 - 동적바인딩
}
공감하며 읽었습니다. 좋은 글 감사드립니다.