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