Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Velocity模板中子类的访问方法_Java_Velocity - Fatal编程技术网

Java Velocity模板中子类的访问方法

Java Velocity模板中子类的访问方法,java,velocity,Java,Velocity,我有以下课程: 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){

我有以下课程:

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);
将对象加载到速度模板中时:

My Template
$c.a.getS()
我得到以下输出:

My Template
$c.a.getS()
而不是它应该是:

My Template
some string
似乎Velocity不知道如何加载从超类继承的模板方法。
这是真的吗?或者我在这里遗漏了什么。

我一直在玩弄这个问题,我想出了一个解决方案。 为使其正常工作,我做了以下更改:

  • 使s的属性受保护而不是私有:

    protected String s;
    
  • 使基类A中的getter和setter抽象:

    public abstract void setS(String s);
    public abstract String getS();
    
  • 重写子类B中的抽象方法


  • 我一直在玩弄这个问题,我想出了一个解决办法。 为使其正常工作,我做了以下更改:

  • 使s的属性受保护而不是私有:

    protected String s;
    
  • 使基类A中的getter和setter抽象:

    public abstract void setS(String s);
    public abstract String getS();
    
  • 重写子类B中的抽象方法