老师看看4-4编程练习逻辑有没有改进的地方
来源:4-4 编程练习
课桌刻着小时候
2019-11-15 16:51:53
//抽象类Shape,里面含抽象方法area( ) public abstract class Shape{ //定义area抽象方法,强制要求子类必须覆写area抽象方法; public abstract void area(); } //子类圆Circle类 public class Circle extends Shape { //属性:圆的半径r private double r; //创建带参构造方法以及无参构造方法 public Circle(double r){ } public Circle(){ } //创建针对半径的赋值和取值方法 public double getR() { return r; } public void setR(double r) { this.r = r; } //重写父类中area()方法 public void area(){ double s=3.14*r*r; System.out.println(s); } } public class Rectangle extends Shape { //属性:矩形的长lenghth、宽wide private double length; private double wide; //创建带参构造方法以及无参构造方法 public Rectangle(double length,double wide){ } public Rectangle(){ } //创建针对长、宽的赋值和取值方法 public double getLength() { return length; } public void setLength(double length) { this.length = length; } public double getWide() { return wide; } public void setWide(double wide) { this.wide = wide; } //重写父类的area()方法 @Override public void area() { double s=length*wide; System.out.println(s); } }
//测试类 public class Test { public static void main(String[] args) { //创建类的实例,并分别对圆的半径和矩形的长宽进行赋值 Shape circle=new Circle();//向上转型:调用覆写方法 Circle a=(Circle)circle;//向下转型:给子类set方法赋值 a.setR(3); a.area(); Shape rectangle=new Rectangle();//向上转型:调用覆写方法 Rectangle b=(Rectangle)rectangle;//向下转型:给子类set方法赋值 b.setLength(6); b.setWide(3); b.area(); } }
1回答
同学你好,代码整体完成的不错,但是还可以优化:
1、建议在有参构造中调用当前对象对应属性的set()方法,这样在创建对象时,传入参数,就可以为属性赋值。
具体如下:
2、根据上述修改,Test类中就不需要向下转型,调用set()方法设置参数了,只需要创建对象时传入参数就可以啦,使代码更加简洁。
具体代码如下:
修改后的代码如下:
//抽象类Shape,里面含抽象方法area( ) public abstract class Shape{ //定义area抽象方法,强制要求子类必须覆写area抽象方法; public abstract void area(); }
//子类圆Circle类 public class Circle extends Shape { //属性:圆的半径r private double r; //创建带参构造方法以及无参构造方法 public Circle(double r){ this.setR(r); } public Circle(){ } //创建针对半径的赋值和取值方法 public double getR() { return r; } public void setR(double r) { this.r = r; } //重写父类中area()方法 public void area(){ double s=3.14*r*r; System.out.println(s); } }
public class Rectangle extends Shape { //属性:矩形的长lenghth、宽wide private double length; private double wide; //创建带参构造方法以及无参构造方法 public Rectangle(double length,double wide){ this.setLength(length); this.setWide(wide); } public Rectangle(){ } //创建针对长、宽的赋值和取值方法 public double getLength() { return length; } public void setLength(double length) { this.length = length; } public double getWide() { return wide; } public void setWide(double wide) { this.wide = wide; } //重写父类的area()方法 @Override public void area() { double s=length*wide; System.out.println(s); } }
//测试类 public class Test { public static void main(String[] args) { //创建类的实例,并分别对圆的半径和矩形的长宽进行赋值 Shape circle=new Circle(3);//向上转型:调用覆写方法 Shape rectangle=new Rectangle(6,3);//向上转型:调用覆写方法 circle.area(); rectangle.area(); } }
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题