루에LOUET -:- Wish Coming True -:-

louet.egloos.com

포토로그 마이가든



자바 indirect extends와 toString() 질문 프로그래밍 이야기

상속에 관해서

A,B,C클래스가 있다고 가정.
가령 이런식으로 상속이 되있다고 하면
class A{
    private int a=1;
    
    public int pt(){
        return a;
    }
}
class B extends A{
    private int b=1;

    public int pt2(){
        return pt()+b;
    }
}
여기까진 잘 됩니다. 즉, 상속을 받았기 때문에 pt()를 바로 불러올 수 있다는 것. 그런데
class C extends B{
    private int c=1;

    public int pt3(){
        return pt()+c;
    }
}
는 안된다는거.... class C에서 B를 상속받았고, B는 A를 상속받은 클래스니 A->B->C 이렇게 상속이 된 상태인데 어째서 C에서 바로 쓸수 없는가. 여기서 super.pt(); 이런식으로, 즉 B.pt(); 처럼은 사용이 가능한데 C에선 안되는 이유가 궁금합니당.

그리고 toString()이란 함수가 뭔가 특별한 기능을 하는지도 궁금. 가령 클래스 A에
toString(){
    System.out.println("우아");
}
뭐 이런걸 만들어 놨다고 하면 나중에 다른 곳에서
System.out.println(A);
System.out.println(A.toString);
라고 하면 저 toString함수가 출력이 되던데(위 아래 둘 다 동일한 기능수행) 왜 저렇게 되는지도 궁금.

트랙백

이 글과 관련된 글 쓰기 (트랙백 보내기)
TrackbackURL : http://louet.egloos.com/tb/4267121 [도움말]

덧글

  • 2009/11/02 00:40 # 답글

    비공개 덧글입니다.
  • 사월 2009/11/02 16:58 # 답글

    근데 상속해도 안되는 거라면 에러 메세지 보면 잘 나와있지 않을까요?

    그리고 저게 보안상의 이유라고 들었는 적이 있는거 같기도 하고, 저렇게 건너뛰기해서 상속이 가능하다면
    해킹을 할때에 저렇게 일부러 상속을 하게 만들어서 접근한다는 이야기도 들어본적이 있어서;;
  • 2009/11/02 19:45 # 답글

    비공개 덧글입니다.
덧글 입력 영역