2012-11-23 3 views
-1
public abstract class Vehicle { 

     public void drive(){ 
      spinTheWheels(subclass.getNumWheels()); 
     } 

     public void spinTheWheels(int wheelsTotal){ 
      .... 
     } 
} 

public class Car extends Vehicle { 
    private final int numWheels = 4; 

    ... 
} 

위 예제에서 차량 내에서 자동차의 numWheels를 참조하고 싶습니다. 이것이 어떻게 가능한지?하위 클래스 인스턴스 변수를 참조하십시오

답변

-1

"super"키워드를 사용하여 하위 클래스에서 수퍼 클래스 변수 만 참조 할 수 있지만 그 반대는 사용할 수 없습니다. 수퍼 클래스는 하위 클래스에 대해 전혀 알지 못합니다.

0

이것은 불가능합니다. 기본 클래스는 상속 된 위치를 모르기 때문에 서브 클래스 내부에 무엇이 있는지 결코 알지 못합니다. 상속이 잘 작동하기 때문입니다. 하위 클래스는 기본 클래스의 동작을 추가 또는 수정해야하며 기본 클래스는 필요한 기본 동작 및 속성을 포함해야합니다.

EDIT : OP의 댓글을 명확히하기 위해 추가 된 콘텐츠입니다.

기본 클래스에서 휠 수에 대한 메서드를 갖기를 원하면 모든 경우에 NumberOfWheels라는 멤버 속성 또는 이동 가능 요소가 있어야합니다. 이 경우 기본 Vehicle 클래스 내에서이를 선언해야합니다. 파생 클래스에서이 변수를 선언하고 기본 클래스 내에서이 변수를 사용할 수 없습니다. 난 당신이 여기에 두 가지 옵션이 있음을 알 수

, 기본 클래스에서

  1. , 당신의 GetNumberOfWheels 방법 개요는 가상 또는하고 그것을 사용하는 파생 클래스를 강제로. 이 경우에 당신의 비천한 클래스는 변수를 가질 수도 있고 가지지 않을 수도 있지만이 방법을 구현해야합니다. 예를 들어 파생 클래스 중 하나가 HoverCraft가 될 수 있습니다. HoverCraft에는 휠 변수가 없습니다. GetNumberOfWheels 메서드는 구현이 필요로하는 것을 기반으로 0을 반환하거나 예외를 throw 할 수 있습니다.
  2. 나는 이것이 더 깔끔한 방법이기 때문에 이것을 선호한다. 바퀴 수와 GetNumberOfWheels 메서드가있는 인터페이스를 가질 수 있습니다. 자녀 수업을 강제로 시행하십시오. 파생 된 각 클래스는 고유 한 속성 및 메서드 구현을 제공 할 수 있으므로 필요할 때 사용할 수 있습니다.
+0

감사합니다. - 공정합니다. 그러나 Car 하위 클래스에서 numWheels을 선언하도록하고 싶다고 가정 해 보겠습니다. 다음과 같이 사용할 수 있습니다. abstract int getNumWheels(); 예를 들어 Vehicle 클래스에서 getNumWheels() 메서드를 강제로 구현할 수 있습니다. 변수의 강제 선언에 대한 공식이 있습니까? – user1848181

+0

상속받을 필요가있는 기본 클래스의 다른 요구 사항을 모르지만 여기에는 약간의 불일치가있는 것 같습니다. 내가 더 자세한 내용을 제공하기 위해 위의 내 대답을 편집합니다. – ryadavilli

관련 문제