我有这两个类:
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();
valA是100 valB再次为100
如何编写clsB.getMax();
返回200的代码?
答案 0 :(得分:6)
您可以在B类中覆盖getMax:
@Override
public int getMax()
{
return max;
}
虽然一般来说,在超类和子类中使用相同名称的变量是个坏主意。
请注意,更改后,以下内容也将返回200:
A clsB = new B();
valB = clsB.getMax();
答案 1 :(得分:2)
覆盖getMax
中的B
方法:
class B extends A
{
public int max = 200;
public int getMax()
{
return max;
}
}
在getter方法中,return max;
相当于return this.max
,其中this
引用B
的当前实例。另一方面,调用return super.max
将返回父子类中引用的max
字段值。
答案 2 :(得分:2)
简短的回答是你不能像你正在尝试的那样覆盖子类中的成员。你应该做的是让B直接改变max的值。像这样:
class B extends A
{
public B()
{
max = 200;
}
}
答案 3 :(得分:0)
您必须将方法getMax()
添加到课程B
。实施可能与A类相同
@Overwrite
public int getMax()
{
return max;
}
当你不覆盖B
中的方法时,会调用父方法getMax()
。并且父元组getMax()
返回150
答案 4 :(得分:0)
尝试方法覆盖
在Java中,"最接近的方法"将被召唤。因为clsB扩展了A,但是没有它自己定义的getMax(),所以将调用A&#39的getMax()版本。但是,因为clsB也共享A的变量,所以getMax(从A类调用)将返回A类的数字。
解决方案? 添加
public int getMax()
{
return max;
}
到B级。
答案 5 :(得分:0)
实施方法覆盖概念
@Override
public int getMax()
{
return max;
}
在运行时覆盖
A clsB = new B();
valB = clsB.getMax();
希望这应该有用。
答案 6 :(得分:0)
Java不支持覆盖类中的任何变量。
您可以通过两种方式完成此操作。
通过构造函数传递变量。我建议这样做,因为,如果方法做同样的动作。通过覆盖并再次执行它是一种不好的做法。
Class A {
public int max = 100;
public A(int maxVal)
{
this.max=maxVal;
}
public int getMax(){
return max;
}
}
B clsB = new B();
A clsA = new A(clsB.max);
覆盖方法
@override
public int getMax(){
max=200;
//do the job.
}