簡體   English   中英

如何修改從超級函數返回的字符串

[英]How to modify string returned from super function

這是我在超類中的toString()函數。 我希望能夠在子類中重用此函數,但將其修改為改為“梯形坐標”而不是“四邊形坐標”。

我嘗試使用stringbuilder修改返回值,但是它沒有用,所以也許我濫用了stringbuilder。 我想做些什么嗎?還是應該將整個方法的代碼復制/粘貼到我的子類方法中,然后在那里修改文本?

public String toString(){   //this function returns a readable view of our quadrilateral object
        String message = new String();
        message = "Coordinates of Quadrilateral are:\n< " + this.point1.getX() + ", " + this.point1.getY() + " >, < " 
                + this.point2.getX() + ", " + this.point2.getY() + " >, < " 
                + this.point3.getX() + ", " + this.point3.getY() + " >, < " 
                + this.point4.getX() + ", " + this.point4.getY() + " >\n";

        return message;
    }

這是我的子類

    //this function returns a readable view of our trapezoid
public String toString(){
    String modify = super.toString();
    StringBuilder sb = new StringBuilder(modify);
    sb.replace(16, 28, "Trapezoid");
    return modify + "\nHeight is: " + getHeight() + "\nArea is: " + getArea();
}

代替

return modify + "\\nHeight is: " + getHeight() + "\\nArea is: " + getArea();

嘗試

return sb.toString() + "\nHeight is: " + getHeight() + "\nArea is: " + getArea();

順便說一句,而不是+ ,最好使用StringBuilder.append() ,像這樣

String modify = super.toString();
StringBuilder sb = new StringBuilder(modify);
sb.replace(16, 28, "Trapezoid");
sb.append("\nHeight is: ").append(getHeight()); // etc.

比修改超類的輸出更好的是修改超類,以便子類可以提供適當的形狀名稱,例如

class Quadrilateral {
    protected String getShapeName() {
        return "Quadrilateral";
    }

    public String toString() {
        String message = "Coordinates of " + getShapeName() + ...
        ...
    }
}

class Trapezoid {
    @Override
    protected String getShapeName() {
        return "Trapezoid";
    }
}

主要好處是您擺脫了梯形的toString()對超類toString()確切措辭的依賴。 假設您將四邊形的toString()消息更改為“四邊形的坐標...”-如果這樣做,則必須修改梯形(以及其他子類)中的索引(16、28)或它的toString( )將顯示“ thelinesTrapezoideral ...”

采用

return sb.toString() + "\nHeight is: " + getHeight() + "\nArea is: " + getArea();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM