我有一个名为User的抽象类和一个扩展User的子类。User类包含一个方法:受保护的抽象空setId(String newId){}:它在User类中设置一个私有变量id。所以我的问题是,当我去创建setId()方法时,如果User类中的id是私有的,我如何引用它?据我所知,id变量不能被设置为受保护的。感谢任何能帮忙的人!
@Override
public void setId(String newId){
if(checkValidId(newId)){
????
}
}
您应该在名为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());
}
}
后果
您可以在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”超类;和三个子类,每个都有自己独特的特征(我选择了“狗”、“猫”和“鸟”)。在我们构建了所有这些之后,我们将创建一个主类来测试一切,这就是我遇到问题的地方。我试图为这些独特的特性调用