티스토리 뷰

부모 클래스의 print()함수가 자식 클래스에서 오버라이딩/ 재정의 되어 있을 때

부자되세요 부->자

 

1. Parent p = new Child();

  • 자식은 -> 부모로 형변환 가능
    • 만들어지는 클래스 타입은 new 이후 오른쪽 ->
    • 할당되는 참조 변수의 유형은 <- new 왼쪽
    • Parent 객체 참조 변수에 담긴다. <- Child() 생성자로 Child 클래스가 만들어져
    • memory 상에는 Object - Parent - Child 클래스들을 위한 공간들이 위에서부터 생기고
      p 변수는 Parent의 주소를 참조한다!!
    • 1) 따라서 p 변수는 Parent 공간에서 메소드들을 찾으며, Parent 공간에서 못찾으면 순차적으로 위로 간다.
  • 부모 참조변수 p를 통해 자식 메소드 호출 불가능!!

    • 2) 예외> p.print(); // 자식 클래스에서 오버라이딩 한대로 출력됨!!
      • 메모리 상에 Child 공간이 있기 때문임

 

2. Child c = new Child();

  • 자식 클래스가 상속받은 메소드를 오버라이딩 했더라도. super.print() 형식으로 부모의 메소드 기능을 사용할 수 있다.
    Child c = new Child();
    -> 자식 참조 변수 c로 부모 메소드 호출 가능 -> super

  • 상속 예외!! 1) private 2) 부모의 생성자

 

3. Child c3 = (Child) p;

  • 형변환
  • 부모 참조변수 p로 자식 클래스를 참조하고 싶을 때!!!
    • 메모리상 Parent 밑에 있는 Child 영역도 p 변수가 접근 가능해진다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함