기본적으로 여기에 약간의 문제가 있습니다.개체 참조 형식 (Dynamic Binding)에 문제가 있습니까?
나는 슈퍼 클래스와 서브 클래스를 가지고있다. 수퍼 클래스의 메서드를 재정의하는 하위 클래스의 메서드를 실행하는 할당을 수행해야합니다. 이것은 잘 작동합니다. 내가 겪고있는 문제는 "동적 바인딩"입니다. 하위 클래스와 동일한 클래스로 참조 변수 유형을 선언하면 올바르게 작동합니다. 그러나 형식을 수퍼 클래스의 것으로 선언하면 존재하는 하위 클래스의 메서드를 인식하지 못합니다.
다음은 예입니다. 그것은 잘 작동
BabyShip subref = new BabyShip();
: 나뿐만 ShippyShip의 참조를 선언하면 내가 배라는 클래스와 BabyShip
라는 선박의 또 다른 서브 클래스가 있습니다. 그러나, 나는로 선언 할 때 :
Ship subref = new BabyShip();
나는 선박으로 하위 참조의 유형을 선언하는 경우 컴파일러도 BabyShip의 방법을 인식하지 않습니다 ...하지만 내 책은 명확하게해야한다고 말한다. 왜이 일을하는거야?
정규식에서 컴파일 할 때 기호 오류를 찾을 수 없습니다.
ShipTester.java:8: error: cannot find symbol
ship.setMaxPassengers(1);
^
symbol: method setMaxPassengers(int)
location: variable ship of type Ship
1 error
죄송합니다. 당신 말이 맞아요. 그리고 저는 그것이 타입의 클래스에 속하는 메소드 만 실행할 수 있다는 것을 분명히 읽지 않았습니다. 나는 다른 해결 방법을 사용해야 할 것 같아요. – Johnny
@Johnny : 코드가 특정 하위 클래스에서만 작동한다면 변수의 유형이어야합니다. –