我有以下课程:
public abstract class A{
private String s;
public void setS(String s){
this.s=s;
}
public String getS(){
return this.s;
}
}
public class B extends A{
private String s2;
public void setS2(String s2){
this.s2=s2;
}
public String getS2(){
return this.s2;
}
}
public class C{
private A a;
public setA(A a){this.a = a;}
public getA(){return this.a;}
}
我创建了两个对象:
B b = new B();
b.setS("some string");
C c = new C();
c.setA(b);
当我将对象加载到Velocity模板中时:
My Template
$c.a.getS()
我得到以下输出:
My Template
$c.a.getS()
而不是它应该是:
My Template
some string
似乎Velocity不知道加载从超类继承的模板方法。 这是真的?或者我在这里遗漏了一些东西。
答案 0 :(得分:0)
我一直在玩这个问题,我想出了一个解决方案。 为了使它工作,我做了以下更改:
使s属性受保护而不是私有:
protected String s;
在基类A中创建getter和setter摘要:
public abstract void setS(String s);
public abstract String getS();
覆盖子类B中的抽象方法。