我是菜鸟,我需要一些帮助。
所以我有一个带有私有变量的抽象类。我还有一个名为getThing()的方法来返回它。
我有一个扩展该抽象类的类,它也有一个私有变量和一个覆盖原始类的方法,以从抽象类中获取值。
能够访问这两个值的唯一方法是在子类中创建一个名为getSuperThing的第二个方法,并在其中使用super。好吧,我只是出于好奇而想知道是否有更简单的方法可以通过执行像objectNae.super.getThing()这样的操作来访问抽象类方法。
谢谢;)
答案 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()之外,您还有其他方法。抽象类在使用之前必须是子类。