需求如下:
原来有个类,其中的每个方法实现都返回该类本身。

public class AClass {
    private String str="";
    
    public AClass addString(String str) {
        this.str = str;
        return this;
    }
    
    public String getString() {
        return str;
    }
}

这样就支持链式调用

AClass a = new AClass();
a.addString().addXXX().addYYY()

现在有一个新的类B想要继承A类的全部方法,同时新增一些方法,如下。

public class BClass extends AClass {
    private int num = 0;
    
    public BClass addInt(int num) {
        this.num = num;
        return this;
    }
    
    public int getInt() {
        return num;
    }
}

但是无奈类A每个返回的是A类,因此,这样声明:

AClass b = new BClass();
b.addInt(3); //报错
b.addString("test");

将B对象指向A,但A中没有addInt()方法,因此出错。应该改为:

BClass b = new BClass();
b.addInt(3); 
b.addString("test");

但这么一来就对链式调用的支持很微妙,即:

BClass b = new BClass();
b.addInt(3).addString("test"); //正确
b.addString("test").addInt(3); //错误

ringocat
28 声望3 粉丝