java繼承的一個小問題

需求以下:
原來有個類,其中的每一個方法實現都返回該類自己。java

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

這樣就支持鏈式調用this

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

如今有一個新的類B想要繼承A類的所有方法,同時新增一些方法,以下。code

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");

但這麼一來就對鏈式調用的支持很微妙,即:get

BClass b = new BClass();
b.addInt(3).addString("test"); //正確
b.addString("test").addInt(3); //錯誤
相關文章
相關標籤/搜索