如何在子类方法Java中调用超类变量

时间:2018-12-19 00:28:17

标签: java abstract-class superclass

我有一个名为User的抽象类,以及一个扩展了User的名为Staff的子类。 User类包含一个方法:受保护的抽象void setId(String newId){}:在User类中设置私有变量“ id”。所以我的问题是,当我去在Staff类中创建setId()方法时,如果它是私有的,我该如何在User类中引用它?据我所知,'id'变量不能设置为受保护。感谢任何可以提供帮助的人!

@Override
public void setId(String newId){
    if(checkValidId(newId)){
       ????
    }
}

2 个答案:

答案 0 :(得分:0)

您可以在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);
       }
   }

}

答案 1 :(得分:0)

您应该在名为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()); 
    }
}

Results