부모를 참조한 자식클래스 객체 생성 


사실 이는 굉장히 기초적인 부분이지만 교수님의 말씀대로 
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 관계가 있다고 한다. 너무 신기하고.

댓글

이 블로그의 인기 게시물

git-receive-pack not permitted on 깃 허브 로그인 관련 문제