Java实现is-a与has-a关系时circle类无法使用shapeArea变量问题咨询
错误原因
- Java语法不允许在类的主体作用域内直接编写非成员声明类的执行语句,你写的
shapeArea.area = 1;属于执行赋值逻辑,不能直接放在circle类的类体中,必须放到构造方法、初始化代码块或者普通成员方法里。 - 补充两个编码规范优化建议:
- 不要自定义名为
Object的类,会和Java默认的根类java.lang.Object产生命名冲突,Java中所有类默认自动继承java.lang.Object,不需要显式声明继承。 - Java类名约定使用大驼峰命名法,建议把
shape改为Shape、area改为Area,符合通用编码规范。
- 不要自定义名为
修正方案示例
以下是调整后的可运行代码,以构造方法中赋值为例:
class Shape { } class Area { public double area; } class TwoDshape extends Shape { Area shapeArea = new Area(); } class Circle extends TwoDshape { // 在构造方法中完成赋值,实例化Circle对象时会自动执行 public Circle() { shapeArea.area = 1; } }
如果不需要在实例化时自动赋值,也可以把赋值逻辑放到单独的成员方法中,按需调用即可。
内容的提问来源于stack exchange,提问作者ballstowall
相关产品推荐
相关产品推荐

