Prtiillaalkjf
2k
2021-03-16 11:04:37
6
334

java 상속에 관한 기초 질문입니다..


기본적인 것인데 또 여려가지 해보니 혼동이오네요;;

우선 위와같이 B클래스는 A를 상속받고있습니다.


제가 생각했을때 B  b = new B(); 가아닌 A  b = new B();와 같이 부모타입의 참조변수로 설정할경우

부모타입클래스에 있는 것만 사용할수있다?라고 생각을하였습니다.;

위에서 말씀드린것과같이 저는 A b = new B(); 를 그림과같이 나타내면


위와같이 A참조변수로 담았으니 A에있는것만 사용하다! 라고생각을하였습니다..

하지만 결과를 보시면아시겠지만 기본형은 부모것을참조하지만 메서드는 자식메소드를 참조하네요;;

혹시 설명해주실분 있으신가요..기본적인거질문드려서 ..부끄럽네요;;

0
  • 답변 6

  • dudgh107
    1k
    2021-03-16 11:12:32

    책부터 정독 

    힌트 :오버라이딩

  • fender
    24k
    2021-03-16 11:13:27 작성 2021-03-16 11:13:40 수정됨

    "A a"와 같이 유형으로 선언하는 것은 a객체의 무언가를 변경하겠다는 것이 아니라 단지 a를 어떻게 부를지에 대한 문제일 뿐입니다.

    그래서 "사람"을 상속한 "군인"이라는 유형이 있다면, "이름" 속성은 "사람"에 정의 되어 있을테니 실제 a 객체가 군인 유형이라도 "사람 a"와 같이 선언해도 "a라는 사람 이름이 무엇인가"와 같이 말이 되는 것이고, 반면에 "계급" 속성은 "군인"이라는 유형에 정의했을테니 "사람 a"라고만 해서 a가 군인인지 야구선수인지 개발자인지 알 수 없는데 "a의 계급은 무엇인가"라고 접근하면 컴파일 오류가 나는 것입니다.

  • Prtiillaalkjf
    2k
    2021-03-16 11:40:09 작성 2021-03-16 11:55:21 수정됨

     

    dudgh107// 오버라이딩은 메소드만 되는군요... 변수선언은안되고요..








  • 개봉박살
    482
    2021-03-16 14:02:54

    같은이름의 함수가 있다면 오버라이딩됩니다.

    내부에서 super로 쓰지 않는 이상 변수로 super클래스의 함수는 호출할 수없습니다.

    그리고 추가로 생성자의 클래스에만있는 함수도 쓰지 못합니다.(내부에 정의되어있지만 못쓰는겁니다.)

    왜냐면 형태를 부모형으로 변수를 선언했기때문입니다.

    이런경우 형변환을하여 사용해야 합니다.

    public class SuperTest {
    	public static void main(String[] args) {
    		Parent b = new Child();
    		b.print();
    //		b.pPrint();			//못씀
    		((Child)b).pPrint();//이렇게 써야함
    	}
    }
    
    class Parent{
    	public void print() {
    		System.out.println("부모다");
    	}
    }
    
    
    class Child extends Parent{
    	
    	public void pPrint() {
    		super.print();
    	}
    	
    	@Override
    	public void print() {
    		// TODO Auto-generated method stub
    		System.out.println("자식이다.");
    	}
    }


  • yeori
    2k
    2021-03-16 14:54:26

    부끄러운 질문이 아니라,

    필드도 오버라이드 되는가?

    라는 흥미로운 주제입니다

    (물론 되지 않음)

  • Prtiillaalkjf
    2k
    2021-03-16 15:11:43
    yeori //넵..
    작성해주신 분들 감사합니다..
  • 로그인을 하시면 답변을 등록할 수 있습니다.