我要准备一组Java类进行模板制作。
我有一个抽象模板:
package Test;
public class Abstract {
protected String template = "ABSTRACT TEMPLATE";
public Abstract() {
}
public void Render() {
System.out.println("FROM ABSTRACT RENDER:");
System.out.println(this.template);
}
}
还有一个实际的:
package Test;
public class Actual extends Abstract {
protected String template = "ACTUAL TEMPLATE";
public Actual() {
super();
System.out.println("FROM ACTUAL CONSTRUCTOR:");
System.out.println(this.template);
}
public void Test() {
System.out.println("FROM ACTUAL TEST:");
System.out.println(this.template);
}
}
我无法让扩展类重置受保护属性的值(在这种情况下为template
),而让抽象方法使用它。
这是我的用例:
Actual actual = new Actual();
actual.Render();
actual.Test();
这是我的输出:
FROM ACTUAL CONSTRUCTOR:
ACTUAL TEMPLATE
FROM ABSTRACT RENDER:
ABSTRACT TEMPLATE <--- this is the problem, why not "ACTUAL"?
FROM ACTUAL TEST:
ACTUAL TEMPLATE
如何从子类中覆盖该值?如果我未将其设置为任何值,则调用abstract方法将始终说该属性为null,即使该属性是在子类中设置的。