1

我是菜鸟,我需要一些帮助。

所以我有这个带有私有变量的抽象类。我还有一个名为 getThing() 的方法来返回它。

我有一个扩展该抽象类的类,它也有一个私有变量和一个覆盖原始变量以从抽象类获取值的方法。

那么,能够访问这两个值的唯一方法是在名为 getSuperThing 的子类中创建第二个方法,并在其中使用 super。好吧,我只是出于好奇想知道是否有更简单的方法可以做到这一点,并且能够通过执行 objectNae.super.getThing() 之类的操作来访问抽象类方法。

谢谢 ;)

4

3 回答 3

3

变量 isprivate和 so 只能被包含(抽象)类引用。正如您所说,您可以从子类调用超类方法(而不是被覆盖的方法)。

如果您想直接从子类访问变量(不需要访问器方法),请protected改为使用它。这是关于控制对类成员的访问的文档。

于 2012-05-10T03:45:42.860 回答
1

如果我正确理解您的问题,那么您不应该在具体子类中覆盖抽象类的方法。不需要,除非您需要子类返回与抽象类返回的值不同的值(这表明设计不佳)。

相反,抽象类的方法可以作为子类的方法访问。

所以,如果你有:

public abstract class AbstractClass {
  private int value = 3;

  public int getValue() {
   return value;
  }
}

public class ConcreteClass extends AbstractClass {
}

那么你应该能够做到:

new ConcreteClass().getValue()
于 2012-05-10T03:52:40.140 回答
0

我认为除了在子类的 getThing() 或 getSuperThing() 方法中调用 super.getThing() 之外,您没有其他方法。抽象类在使用之前必须被子类化。

于 2012-05-10T04:21:26.973 回答