克服繼承中的障礙:從超類訪問子類方法
在踏上繼承之旅時,經常會遇到訪問方法的挑戰具體到子類別。為了解決這些障礙,讓我們深入研究所涉及的概念並找到解決限制的方法。
變數類型和方法可用性
當您將變數宣告為型別時對於超類,您可以限制對該超類別的方法和成員變數的存取。考慮以下範例:
Pet cat = new Cat("Feline", 12, "Orange"); cat.getName(); // this is OK cat.getColor(); // this is not OK, getColor() is not in Pet
變數 cat 已被宣告為 Pet 類型,因此只能存取 Pet 類別中定義的方法。要存取子類別特有的方法,例如 Cat 子類別中的 getColor(),我們需要將變數明確宣告為子類別類型或將其轉換為該類型。
轉換為具體類型
要將變數宣告為具體子類別,請將其修改為如下:
Cat cat = new Cat("Feline", 12, "Orange"); cat.getName(); // OK, getName() is part of Cat (and the superclass) cat.getColor(); // OK, getColor() is part of Cat
現在,變數cat 可以存取Cat 類別的所有方法,包括getColor()。
變數轉換操作
或者,如果您不確定確切的子類,您可以將變數轉換為具體類型type:
Pet pet = new Cat("Feline", 12, "Orange"); Cat cat = (Cat)pet; cat.getName(); // OK cat.getColor(); // OK
轉換可讓您存取指定子類別的方法,而無需將變數宣告為確切的子類型。
組合方法
您也可以透過先宣告超類別類型的變量,然後強制轉換為具體變數來組合這兩種方法type:
Pet pet = new Cat("Feline", 12, "Orange"); Cat cat = (Cat)pet; cat.getName(); // OK cat.getColor(); // OK
透過利用這些技術,您可以繞過子類別特有的變數類型和存取方法所施加的限制,使您能夠充分利用繼承的力量。
以上是如何在繼承中從超類別變數存取子類別方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!