簡體   English   中英

如何從 super 的關聯 class 調用子類方法

[英]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方法:

  1. 遍歷Doctor所在的建築物的Person-ListArray(沒關系,有一種方法可以獲取它們)。
  2. 對於 ListArray 上那些是 Parent 實例的對象(我可以使用 instanceof Parent,所以這里沒有意義),調用方法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 的方法,但這是一種不好的做法,盡管有助於理解語言語義和語法。

很少有好的應用程序設計實踐

  1. 更高和更低的 label 模塊應該只依賴於抽象。 取決於具體的 class 而不是抽象注入高耦合。 應用程序應設計為實現類之間的低耦合和高內聚。
  2. 封裝(建築物不應直接公開其 state 以供訪問和修改,而應公開處理其狀態的方法)
  3. instanceof 和 cast 是一種代碼味道,請避免使用它們。

暫無
暫無

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

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