我正在使用java,我想强制所有的子类使用超类的变量。 超类是抽象的,子类实现其所有方法,但不实现变量。 有什么办法可以强制子类使用超类的变量吗?
感谢
答案 0 :(得分:1)
您无法“强制”子类使用您的变量。但也许你正在寻找Template Pattern。这样,您可以在抽象超类中定义模板方法,它定义了类的结构和一般工作方式。它调用钩子方法,它们是抽象的,必须通过实现类来提供。您可以将其设置为最终以防止子类覆盖模板方法。然后子类必须实现提供的抽象钩子方法,但不能覆盖模板方法。
答案 1 :(得分:1)
关键字super
大部分时间用于访问超类方法,大多数时候是父类的构造函数。
但是,您也可以使用super
访问超类的字段。
以下是访问字段的用法示例。
public class Base {
public int a = 1;
protected int b = 2;
private int c = 3;
public Base(){
}
}
public class Extended extends Base{
public int a = 4;
protected int b = 5;
private int c = 6;
public Extended(){
}
public void print(){
//Fields from the superclass
System.out.println(super.a);
System.out.println(super.b);
System.out.println(super.c); // not possible
}
}
public static void main(String[] args) {
Extended ext = new Extended();
ext.print();
}
您始终可以重命名子类中的字段以避免冲突,但如果要将方法参数或局部变量与超类字段区分开来,请使用super
,因为您将使用this
答案 2 :(得分:0)
只需使字段受到保护,这意味着它应该对所有派生类都可见,并且可以在子类中使用它们。如果这就是你所说的力量所暗示的暗示。
答案 3 :(得分:0)
简单。您所需要的只是让子类通过继承继承超类。这将允许您的子类实现超类的功能。
如需更详细的参考,请访问以下链接:http://docstore.mik.ua/orelly/java-ent/jnut/ch03_04.htm
答案 4 :(得分:0)
就像有人在这里说的那样你可以使用模板设计模式来确保在一个方法中给出算法的步骤,这样你就可以在一个可以在子类中使用的方法中使用变量。
另一种方法是将访问修饰符设置为" protected"这确保了从超类继承的子类可以使用超类
中的变量