부모를 참조한 자식클래스 객체 생성
1) 자식 = new 부모 2) 부모 = new 자식
이 두가지에 대해서 꽤나 헷갈렸던 부분이라 배운김에 정리하고 넘어가려한다.
일단 2번 부-자 부분이 에러가 나지 않는 상황이고, 이는 제대로 객체 생성이 이루어진다. 이 때 최상위 클래스인 Object 는 기본적으로 참조, 이후 필드나 메서드는 부모의 것으로 사용되어 진다. 딱 하나 예외상황이 있는데, 자식이 부모의 메서드를 오버라이딩 한 상황이라면 해당 객체를 이용해서 p2.print(); 이런식으로 메서드 호출을 했을 때 자식메서드가 사용되어진다.
이는 오직 오버라이딩된 메서드에만 적용되는 상황이라고 한다. 만약 parent의 su라는 필드가 int = 300 이고, child의 같은 이름인 su라는 필드가 int = 300라고 하자. 이 때 p2.su 의 value는 부모의 것인 300을 가리킨다.
만약 부모 = new 자식 의 모양으로 객체를 생성했을 때에도 자식의 필드, 메서드를 사용하고 싶다면, 새로이 자식 객체를 생성하며 형변환 해주는게 필요하다.
Parent p = new Child();
Child c = (Child)p;
그런데 굳이 이렇게까지 할거 있나 ...
p.s. 자바에서의 클래스 간의 관계에서는 오직 직계(부모, 자식, 자손) 관계만 존재한다. 수직적으로만 존재하고 수평적인(형제)관계는 없다고 한다. -> 이건 알고있었는데 반전은 프론트 언어에서는 sibling 관계가 있다고 한다. 너무 신기하고.
댓글
댓글 쓰기