Java中如何正确访问父类仅声明未初始化的属性?
问题解答
父类未赋值属性的子类可用性
只要父类属性没有被private修饰,子类就可以正常访问该属性。无论你是通过setter方法还是构造方法给子类实例自身继承的父类属性赋值,赋值后子类都可以正常使用这些属性。
代码输出0.0的原因
你的代码里创建了两个完全独立的对象实例,不同实例的属性是互不关联的:
- 你创建的父类实例
obj调用SetRadius()后,仅会给obj自己的radius属性赋值 - 你后续创建的子类实例
obj1是全新的对象,它自身继承的radius属性从未被赋值,而double类型成员变量的默认初始值就是0.0,最终体积计算结果自然为0.0
修正方案
直接给子类实例调用继承来的SetRadius()方法赋值即可,修正后的代码如下:
import java.util.Scanner; class circle2 { double radius; double Area; Scanner Sc = new Scanner(System.in); void SetRadius() { System.out.println("Enter Radius"); radius = Sc.nextDouble(); } } class cylinder2 extends circle2 { double height=5,volume; void GetVolume(){ volume=Math.PI*radius*radius*height; System.out.println("Volume of cylinder : " + volume); } } public class Ch10Alternate_PS { public static void main(String[] args) { cylinder2 obj1 = new cylinder2(); obj1.SetRadius(); obj1.GetVolume(); } }
补充提示:原代码未导入
java.util.Scanner类,直接运行会触发编译错误,修正代码已经补充了对应的导入语句。
内容的提问来源于stack exchange,提问作者Angsu Sen
相关产品推荐
相关产品推荐

