![](/img/trans.png)
[英]Java polymorphism - How to determine whether superclass vs subclass method will be called and superclass variable vs subclass variable?
[英]How to call superclass variable in a subclass method java
我有一個名為User的抽象類,以及一個擴展了User的名為Staff的子類。 User類包含一個方法:受保護的抽象void setId(String newId){}:在User類中設置私有變量“ id”。 所以我的問題是,當我去在Staff類中創建setId()方法時,如果它是私有的,我該如何在User類中引用它? 據我所知,'id'變量不能設置為受保護。 感謝任何能提供幫助的人!
@Override
public void setId(String newId){
if(checkValidId(newId)){
????
}
}
您可以在User類中創建setId方法,並通過Staff類進行訪問。
public abstract class User{
...
public void setId(String id){
this.id=id;
}
}
public class Staff extends User{
...
public void setStaffId(String newId){
if(checkValidId(newId)){
setId(newId);
}
}
}
您應該在名為getID()的超類中創建一個getter方法,該方法僅返回'this.id'。 可以從擴展抽象類的任何類中調用該方法,並且可以使用該方法從id字段中獲取值。 如果那是您的目標:)
重要的是要注意,您可以執行此操作,因為無論何時要為Staff構造一個新對象,構造函數中的第一行都必須在User中調用構造函數以設置必填字段。 例如在這種情況下的id字段。
下面是一個有效的示例,該示例從值5開始動態設置ID。您可以運行它來確認結果,也可以查看下面所附的屏幕截圖。
abstract class User{
static int count = 5;
private int id;
public User(){
this.id = count++;
}
public int getID(){
return this.id;
}
}
class Staff extends User{
public Staff(){
super();
}
public int getID(User x){
return super.getID();
}
}
public class Program {
public static void main(String[] args){
Staff x = new Staff();
System.out.println(x.getID());
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.