以下是代码段及其输出 -
class Box{
int height = 1;
int length = 1;
int width = 1;
Box(int h, int l, int w){
this.height = h;
this.length = l;
this.width = w;
}
int volume(){
return this.height * this.length * this.width;
}
}
class BoxWeight extends Box{
int height = 99;
int length = 99;
int width = 99;
int mass;
BoxWeight(int h, int l, int w, int m) {
super(h, l, w);
this.mass = m;
}
int volume(){
return this.height * this.length * this.width;
}
}
public class BoxDemo {
public static void main(String[] args) {
Box b = new Box(10, 20, 30);
BoxWeight bw = new BoxWeight(40, 50, 60, 10);
System.out.println(bw.height);
System.out.println(bw.length);
System.out.println(bw.width);
//b = bw;
//System.out.println(b.volume());
}
}
输出
99
99
99
这里我无法理解为什么对象bw打印初始化为类成员的值。为什么对象bw没有保存通过构造函数赋值的值?
答案 0 :(得分:4)
BoxWeight
的成员隐藏Box
的成员,因此您无法看到传递给Box构造函数的值。
只需从BoxWeight
int height = 99;
int length = 99;
int width = 99;
在两个类中都有完全相同的volume()
实现也没有意义。
答案 1 :(得分:1)
由于BoxWeight
定义了自己的length
,width
和height
,因此隐藏了Box
中的相应字段。您可以从BoxWeight
中移除字段,也可以转换为Box
,如下所示:
public static void main(String[] args) {
Box b = new Box(10, 20, 30);
BoxWeight bw = new BoxWeight(40, 50, 60, 10);
System.out.println(((Box) bw).height);
System.out.println(((Box) bw).length);
System.out.println(((Box) bw).width);
}
打印:
40
50
60
答案 2 :(得分:0)
这就是继承的工作方式。最后@Override
计数。在这种情况下,它是BoxWeight
。