老师看看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();
}
}如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
相似问题