我是菜鸟,我需要一些帮助。
所以我有这个带有私有变量的抽象类。我还有一个名为 getThing() 的方法来返回它。
我有一个扩展该抽象类的类,它也有一个私有变量和一个覆盖原始变量以从抽象类获取值的方法。
那么,能够访问这两个值的唯一方法是在名为 getSuperThing 的子类中创建第二个方法,并在其中使用 super。好吧,我只是出于好奇想知道是否有更简单的方法可以做到这一点,并且能够通过执行 objectNae.super.getThing() 之类的操作来访问抽象类方法。
谢谢 ;)
我是菜鸟,我需要一些帮助。
所以我有这个带有私有变量的抽象类。我还有一个名为 getThing() 的方法来返回它。
我有一个扩展该抽象类的类,它也有一个私有变量和一个覆盖原始变量以从抽象类获取值的方法。
那么,能够访问这两个值的唯一方法是在名为 getSuperThing 的子类中创建第二个方法,并在其中使用 super。好吧,我只是出于好奇想知道是否有更简单的方法可以做到这一点,并且能够通过执行 objectNae.super.getThing() 之类的操作来访问抽象类方法。
谢谢 ;)
变量 isprivate和 so 只能被包含(抽象)类引用。正如您所说,您可以从子类调用超类方法(而不是被覆盖的方法)。
如果您想直接从子类访问变量(不需要访问器方法),请protected改为使用它。这是关于控制对类成员的访问的文档。
如果我正确理解您的问题,那么您不应该在具体子类中覆盖抽象类的方法。不需要,除非您需要子类返回与抽象类返回的值不同的值(这表明设计不佳)。
相反,抽象类的方法可以作为子类的方法访问。
所以,如果你有:
public abstract class AbstractClass {
private int value = 3;
public int getValue() {
return value;
}
}
public class ConcreteClass extends AbstractClass {
}
那么你应该能够做到:
new ConcreteClass().getValue()
我认为除了在子类的 getThing() 或 getSuperThing() 方法中调用 super.getThing() 之外,您没有其他方法。抽象类在使用之前必须被子类化。