在Java中如何从超类方法中获取子类值?
我有两门课:在Java中如何从超类方法中获取子类值?,java,class,inheritance,Java,Class,Inheritance,我有两门课: Class A { public int max = 100; public int getMax() { return max; } } Class B extends A { public int max = 200; } 我编写以下代码: A clsA = new A(); B clsB = new B(); valA = clsA.getMax(); valB = clsB.getMax(); 瓦拉100岁 瓦尔布又是100岁
Class A
{
public int max = 100;
public int getMax()
{
return max;
}
}
Class B extends A
{
public int max = 200;
}
我编写以下代码:
A clsA = new A();
B clsB = new B();
valA = clsA.getMax();
valB = clsB.getMax();
瓦拉100岁
瓦尔布又是100岁了
如何编写
clsB.getMax()的代码代码>返回200?您可以覆盖B类中的getMax:
@Override
public int getMax()
{
return max;
}
不过,一般来说,在超类和子类中使用相同名称的变量是个坏主意
请注意,更改后,以下内容也将返回200:
A clsB = new B();
valB = clsB.getMax();
您可以在类B中重写getMax:
@Override
public int getMax()
{
return max;
}
不过,一般来说,在超类和子类中使用相同名称的变量是个坏主意
请注意,更改后,以下内容也将返回200:
A clsB = new B();
valB = clsB.getMax();
覆盖B
中的getMax
方法:
class B extends A
{
public int max = 200;
public int getMax()
{
return max;
}
}
在getter方法中,返回max
相当于返回此。max
其中此
引用B
的当前实例。另一方面,调用return super.max
返回父子类中引用的max
字段值。覆盖B
中的getMax
方法:
class B extends A
{
public int max = 200;
public int getMax()
{
return max;
}
}
在getter方法中,返回max
相当于返回此。max
其中此
引用B
的当前实例。另一方面,调用return super.max
返回父子类中引用的max
字段值。您必须将方法getMax()
添加到类B
。该实现可能与类A中的实现相同
@Overwrite
public int getMax()
{
return max;
}
当您不覆盖方法时,来自B
的方法调用父方法getMax()
。而父metodgetMax()
返回150您必须将方法getMax()
添加到类B
。该实现可能与类A中的实现相同
@Overwrite
public int getMax()
{
return max;
}
当您不覆盖方法时,来自B
的方法调用父方法getMax()
。父metodgetMax()
返回150Try方法重写
在Java中,将调用“最近的方法”。由于clsB扩展了A,但没有自己的getMax()定义,因此将调用A的getMax()版本。但是,因为clsB也共享A的变量,所以getMax(从类A调用)将返回类A的编号
解决方案是什么?
加
到B类。请尝试方法重写
在Java中,将调用“最近的方法”。由于clsB扩展了A,但没有自己的getMax()定义,因此将调用A的getMax()版本。但是,因为clsB也共享A的变量,所以getMax(从类A调用)将返回类A的编号
解决方案是什么?
加
对于类B.简单的回答是,您不能像正在尝试的那样重写子类中的成员。您应该做的是让B直接更改max的值。大概是这样的:
class B extends A
{
public B()
{
max = 200;
}
}
简单的回答是,您不能像正在尝试的那样覆盖子类中的成员。您应该做的是让B直接更改max的值。大概是这样的:
class B extends A
{
public B()
{
max = 200;
}
}
实现方法覆盖概念
@Override
public int getMax()
{
return max;
}
覆盖在运行时发生
A clsB = new B();
valB = clsB.getMax();
希望这能起作用。实现方法覆盖概念
@Override
public int getMax()
{
return max;
}
覆盖在运行时发生
A clsB = new B();
valB = clsB.getMax();
希望这能起作用。Java不支持重写类中的任何变量
你可以有两种方法
通过构造函数传递变量。我建议这样做,因为如果该方法执行相同的操作。通过覆盖它并再次这样做是一种糟糕的做法
A类{
公共int最大值=100;
公共A(整数最大值)
{
这个.max=maxVal;
}
公共int getMax(){
返回最大值;
}
}
B clsB=新的B();
A里昂证券=新A(clsB.max)代码>
覆盖该方法
@覆盖
公共int getMax(){
最大值=200;
//做好这项工作。
}
Java不支持重写类中的任何变量
你可以有两种方法
通过构造函数传递变量。我建议这样做,因为如果该方法执行相同的操作。通过覆盖它并再次这样做是一种糟糕的做法
A类{
公共int最大值=100;
公共A(整数最大值)
{
这个.max=maxVal;
}
公共int getMax(){
返回最大值;
}
}
B clsB=新的B();
A里昂证券=新A(clsB.max)代码>
覆盖该方法
@覆盖
公共int getMax(){
最大值=200;
//做好这项工作。
}
您甚至没有重写classB中的getMax()方法,为什么希望得到200?它将执行原始方法,因为在classB中没有其他方法声明重写它。看这里也应该有帮助您甚至没有重写classB中的方法getMax(),为什么您希望得到200?它将执行原始方法,因为在classB中没有其他人声明重写它