当前位置: 首页 > 知识库问答 >
问题:

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

公孙阳羽
2023-03-14

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

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

共有2个答案

闽高峯
2023-03-14

您应该在名为getID()的超类中创建一个getter方法,它只返回“this”。身份证。该方法可以从扩展抽象类的任何类调用,并可用于从id字段中获取值。如果这就是你的目标:)

需要注意的是,您可以这样做,因为无论何时您要构造一个新的对象,构造函数中的第一行必须调用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()); 
    }
}

后果

芮博厚
2023-03-14

您可以在User类中创建setId方法,并通过人员类访问它。

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);
       }
   }

}
 类似资料:
  • 问题内容: 一本书的引用: 如果要从超类的变量引用的对象中调用由子类定义的方法,该怎么办?假定SoftBall类具有一个名为BallBall类未定义的方法riseBall。如何从Ball变量中调用它?一种方法是创建子类的变量,然后使用赋值语句强制转换对象: 在上面的代码片段中,它显示了一个新的 Softball 对象,该对象正在创建并分配为对变量 b 的引用,这是完全合法的,因为类 Softbal

  • 在上面的代码片段中,它显示了一个新的Switterball对象被创建并赋值为变量b的引用,这是完全合法的,因为Switterball类是Ball类的子类。但是引号(间接地)指出,在使用该变量从垒球类调用方法之前,必须将该变量强制转换为垒球类型。为什么会这样?为什么我不能直接使用Ball类型的变量b(它包含对垒球对象的引用)来调用所需的方法?变量b已经有了对象。 (注:我已经读过这篇文章了。)

  • 问题内容: 我正在学习Java入门课程,我们才刚刚开始学习继承。我正在完成一项任务,要求我们创建一个具有名称和年龄的“宠物”超类。和三个子类,每个子类都有自己的独特特征(我选择了“狗”,“猫”和“鸟”)。构建完所有这些之后,我们将创建一个Main类来测试所有内容,这就是我遇到问题的地方。我试图在中调用这些独特特征的方法,但似乎只能找到超类中的方法。 这是主类: 这是我的超人 这是子类之一(它们看起

  • 问题内容: 我对Java中的多态性有基本的疑问。我已经在一个名为AnimalTestDrive.java的文件中编写了以下代码。根据我的说法,以下代码应专门以粗体显示该行,但不幸的是,它不能。您能否解释为什么,我给出了以下错误: 问题答案: 让我们尝试以与编译器相同的方式查看此行: 首先,它需要弄清楚是什么意思。很好而且很容易-它是当前方法中的局部变量,因此它不需要花很多时间。 该变量的编译时类型

  • 我正在学习java入门课程,我们刚刚开始学习继承。我正在做一项任务,要求我们创建一个具有名称和年龄的“Pet”超类;和三个子类,每个都有自己独特的特征(我选择了“狗”、“猫”和“鸟”)。在我们构建了所有这些之后,我们将创建一个主类来测试一切,这就是我遇到问题的地方。我试图为这些独特的特性调用