Java Rectangle类编写求助:私有实例变量与公共方法构造器问题
修复你的Rectangle类代码错误
你的代码存在几个关键错误,逐个修正如下:
错误的static修饰符与变量拼写
实例变量width和height不该用static修饰(static是类变量,所有实例共享同一值),同时你把height拼写成了heigth,导致后续方法找不到正确变量。单参数构造器逻辑错误
你在构造器里创建新的Rectangle对象完全是错误逻辑,正确做法是给当前实例的宽高赋值。双参数构造器的变量遮蔽问题
构造器参数名和实例变量名重名时,直接赋值会导致参数给自己赋值,实例变量根本没被初始化,必须用this区分。
修正后的完整代码:
class Rectangle { // 实例变量,去掉static,修正拼写 private double width; private double height; // 单参数构造器:创建正方形 public Rectangle(double sideLength) { this.width = sideLength; this.height = sideLength; } // 双参数构造器:创建长方形 public Rectangle(double width, double height) { // 用this区分实例变量和参数 this.width = width; this.height = height; } public double computeArea() { return height * width; } public double computePerimeter() { return 2 * (height + width); } public double getHeight() { return height; } public double getWidth() { return width; } }
关键知识点说明:
this关键字:在类的构造器或方法中,this代表当前对象的引用。当局部变量(比如构造器参数)和实例变量同名时,必须用this.变量名来访问实例变量,避免变量遮蔽。- 实例变量 vs 类变量:不带static的是实例变量,每个对象有自己的副本;带static的是类变量,所有对象共享同一个值,这里每个矩形应该有自己的宽高,所以用实例变量。
内容的提问来源于stack exchange,提问作者Sheebs
相关产品推荐
相关产品推荐

