Java使用重写方法

时间:2012-05-10 03:42:56

标签: java

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

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

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

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

谢谢;)

3 个答案:

答案 0 :(得分:3)

变量是private,因此只能由包含(抽象)类引用。正如您所说,从子类中,您可以调用超类方法(而不是重写方法)。

如果要直接从子类访问变量(不需要访问器方法),请改为使用protected。以下是Controlling Access to Members of a Class的文档。

答案 1 :(得分:1)

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

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

所以,如果你有:

public abstract class AbstractClass {
  private int value = 3;

  public int getValue() {
   return value;
  }
}

public class ConcreteClass extends AbstractClass {
}

然后你应该能够做到:

new ConcreteClass().getValue()

答案 2 :(得分:0)

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