자바에서 슈퍼클래스의 레퍼런스 변수로 하위클래스의 인스턴스를 할당할 시에
왜 하위클래스에서 선언된 메소드를 사용할때는 명시적 형변환을 해줘야하는거죠?
레퍼런스 변수의 타입이 슈퍼클래스에서 선언된거라 그런 메소드가 있음을 인지못할수도 있어도 직접 하위클래스까지 찾아가다보면 결국 해당 메소드의 존재를 알수있는거 아닌가요
혹은 존재하는지 모르는 메소드를 탐색하는 효율 때문이라면 자바는 컴파일+인터프리터 언어라 컴파일 단계에서 묵시적 형변환처럼 처음부터 컴파일러가 대신 적용시켜줄수있는거 아닌가요?
그렇게 하지못하는 이유가 있나요
메모리에 레퍼런스 변수와 실제 인스턴스가 할당되는 구조를 모르니까 헷갈리네요
해당 댓글은 삭제되었습니다.
형님 왜화내십니까 빨리알려주십쇼
Mother mother = new Son(); 이라면 mother.Son의함수(); 는 형변환 없이 쓸 수 있지 않음? 머선소리임? 예를들어보셈
(Son)mother.Son의함수() 로 명시적 형변환 해줘야 쓸수있지않나요? 자바버전따라 다른가요?
문법이 ((Son)mother).Son의함수() 였네요
아 그렇네요 감사합니다. 님말이맞음
지피티 왈, 타입 안정성때문에 그렇게 한다고 하네요. 그럴만도한게 형변환없이 쓸수있으면 이게 오버라이딩이된건지, 누구의메서드인지 헷갈릴것같아요.
흠 그렇다면 개발자관점에서 구분짓기위함이군요
해당 댓글은 삭제되었습니다.
형님 왜자꾸 욕하십니까. 오버라이딩된 메소드야 형변환없이 사용되지만 자식클래스에서만 선언된 메소드는 형변환없으면 사용이 안됩니다.. 기본 이론이 부족하신거 아니십니까
아니 방금은 형변환을왜하냐더니 ㅋㅋ 그러니까 제가묻는질문이 이거잖아요 "자바문법적으로 왜 명시적형변환을 해줘야지 자식클래스의 메소드를 호출 가능한가".. 자바 구조적으로 컴파일러가 묵시적으로 처리해줄수있는거 아닌가 굳이 자바문법적으로 강제하는 이유가 있는가?
모르면 닥치고 꺼져병신아
다운캐스팅 관련해서 검색해봐
네형님
자식으로 탐색못한다. 데이터 타입이 부모클래스면 자식클래스의 정보를 알수 없음. 예외가 오버라이딩이고, 그래서 오버라이딩이 자바에서 매우 핵심적인 기술임.