簡體   English   中英

Java繼承類

[英]Java inheritance class

我有主課:

public class MainClass{
    private int firstVal;
    private int secVal;

    public MainClass(int firstVal,int secVal){
      this.firstVal=firstVal;
      this.secVal=secVal;
    }
}

第二類擴展了這一類

 public class SecClass extends MainClass{
     public SecClass(int firstVal,int secVal){
         super(firstVal,secVal)
     }
 }

我想知道如何在SecClass中使用值firstVal和secVal? super.firstVal嗎? 還是我必須確定agian中的值?

謝謝

只需將它們標記為protected而不是private

public class MainClass {
    protected int firstVal;
    protected int secVal;
    //rest of your class...
}

如果要將它們保留為private ,則可以為此字段創建getter和setter並將這些方法標記為publicprotected ,這取決於您希望/需要它們的可見性:

public class MainClass {
    private int firstVal;
    //its value can be retrieved by any class
    public int getFirstVal() {
        return this.firstVal;
    }
    //its value can only be modified by subclasses of MainClass
    protected void setFirstVal(int firstVal) {
        this.firstVal = firstVal;
    }
    //similar for the other field...
}

這是一張有關publicprivateprotected范圍的表格,從中您將理解為什么在child class不能使用private variable原因(來自這篇文章

Modifier    | Class | Package | Subclass | World
————————————+———————+—————————+——————————+———————
public      |  ✔    |    ✔    |    ✔     |   ✔
————————————+———————+—————————+——————————+———————
protected   |  ✔    |    ✔    |    ✔     |   ✘
————————————+———————+—————————+——————————+———————
no modifier |  ✔    |    ✔    |    ✘     |   ✘
————————————+———————+—————————+——————————+———————
private     |  ✔    |    ✘    |    ✘     |   ✘

您的MainClass需要getter和setter。 然后,您可以調用super.getFirstVal()

將它們添加到您的MainClass

public int getFirstVal() {
  return firstVal;
}

public int getSecVal() {
  return secVal;
}

您可以使用getter和setter來做到這一點。 但是,如果您認為子類應該能夠訪問它們,則聲明firstValsecVal受保護。 然后,您可以直接在子類中訪問它們:

subclassInstance.firstVal
subclassInstance.secVal

不允許任何人或任何子類訪問私有變量。 受保護的變量類似,除了子類可以訪問它們。 您仍然可以調用super()構造函數; 最好讓父級構造函數初始化其自己的變量。

如果它們在同一個程序包中,則只需刪除private訪問修飾符。 如果不是,則需要添加protectedpublic (非常不好的主意)。 通常,您不應該將字段暴露給像這樣的子類,因為您不知道它們將如何處理它們。

暫無
暫無

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

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