[英]How to call a subclass method from super's associated class
想象一下,我創建了兩個相關的類(Building 和 Person)。 一棟樓可以容納n個人(人),一個人一次只能在一棟樓里。
到目前為止的代碼(只是它的相關部分)是:
public class Building {
//some attributes like name, location...
private List<Person> person;
//constructor
//some methods
}
public class Person {
//some attributes like name, age...
private Building building;
//constructor
//some methods
}
好的,現在我需要了解有關 Person 的更多詳細信息,因此我將此 class 擴展到其他兩個(醫生和父母),它們有自己的方法,其中一些針對每個 Class 的細節。
編碼:
public class Parent extends Person {
// some specific attributs
public boolean born;
//constructor
//some methods
public void setChildBorn() {
this.born = true;
}
}
public class Doctor extends Person {
// some specific attributs
// constructor
// some methods
public void maternityWard() {
//HERE THE QUESTION
}
}
所以,一旦到達這里,我需要通過maternityWard
方法:
setChildBorn()
。一個簡短的架構是這樣的:
Building < association > Person
/ extends \
Doctor Parent
最后是一個問題:是否可以從另一個子類調用子類中的獨占方法? 如果是,該代碼將如何? 如果可能的話,我相信這里有一些演員,但我不知道該怎么做。
在此先感謝您的幫助。
可以,但是如果person
列表中有Doctor
object 並且您忘記使用instanceof
,您總是有獲得ClassCastException
的風險。 如果沒有,假設您將Person
存儲在一個名為p
的變量中。 然后,要訪問該方法,請執行以下操作:
((Parent) p).setChildBorn();
是否可以從另一個子類調用子類中的獨占方法?
獨占方法在其他子類(即同級類)中的可見性與在非同級 class 中的可見性相同,並且它遵循適用於任何非同級 class 的相同訪問控制。
您可以使用instanceof
運算符和強制轉換來做到這一點
public class Doctor extends Person {
//..some code
public void maternityWard() {
for(Person p : building.getPersonList()){
if(p instanceof Parent){
Parent parent = (Parent)p;
parent.setChildBorn();
}
}
}
PS 雖然這將幫助您調用 Parent 的方法,但這是一種不好的做法,盡管有助於理解語言語義和語法。
很少有好的應用程序設計實踐
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.