[英]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並將這些方法標記為public
或protected
,這取決於您希望/需要它們的可見性:
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...
}
這是一張有關public
, private
和protected
范圍的表格,從中您將理解為什么在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來做到這一點。 但是,如果您認為子類應該能夠訪問它們,則聲明firstVal
和secVal
受保護。 然后,您可以直接在子類中訪問它們:
subclassInstance.firstVal
subclassInstance.secVal
不允許任何人或任何子類訪問私有變量。 受保護的變量類似,除了子類可以訪問它們。 您仍然可以調用super()
構造函數; 最好讓父級構造函數初始化其自己的變量。
如果它們在同一個程序包中,則只需刪除private
訪問修飾符。 如果不是,則需要添加protected
或public
(非常不好的主意)。 通常,您不應該將字段暴露給像這樣的子類,因為您不知道它們將如何處理它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.