簡體   English   中英

在超類方法中使用子類成員變量?

[英]Use subclass member variable in super class methods?

我有一個基類和子類。 基類具有通用方法及其實現,我想在子類中使用它,但我想使用子類成員變量而不是超類。 我不想在子類中重寫相同的方法。 Java中有沒有辦法實現這一目標。

您可以使用一種方法來訪問成員並在子類中覆蓋它。

Class A{
  public void DoStuff(){
     int aux = getResource; 
     /*cool things with aux*/
  }
  protected int getResource(){
    return internal_member;
  }
  private int internal_member;
}

Class B extends A{
  private int another_member;
  @Override
  public int getResource(){
     return another_member;
  }

}

但是要考慮到這不會阻止人們追蹤A類直接使用該成員,最好為成員和getter創建一個基類。

正如前面概述的那樣,另一個選擇是將基類中的數據成員作為受保護的對象,並在子類中對其進行初始化:

Class A{
  public void DoStuff(){
     /*cool things with internal_member*/
  }
  protected List internal_member;
  A(){internal_member = /*Set here a value*/}
}

Class B extends A{
  B(){internal_member = /*Set a different value here! you can even declare a member and assign it here*/}

}

如果需要,可以將構造函數與參數一起使用。

您可以在成員變量上創建一個protected setter,然后在子類的構造函數中覆蓋super變量的值:

class Animal {
   private String voice = "Oooo";

   protected void setVoice(String voice) {
       this.voice = voice;
   }

   public void speak() {
       System.out.println(this.voice);
   }

}

class Dog extends Animal {

    public Dog() {
        setVoice("woof"); 
    }

}

暫無
暫無

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

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