老师看看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回答

好帮手慕酷酷

2019-11-15

同学你好,代码整体完成的不错,但是还可以优化:

1、建议在有参构造中调用当前对象对应属性的set()方法,这样在创建对象时,传入参数,就可以为属性赋值。

具体如下:

http://img.mukewang.com/climg/5dce737209d17b2404820153.jpg

http://img.mukewang.com/climg/5dce7440092a133b05310286.jpg

2、根据上述修改,Test类中就不需要向下转型,调用set()方法设置参数了,只需要创建对象时传入参数就可以啦,使代码更加简洁。

具体代码如下:

http://img.mukewang.com/climg/5dce757309e212da07090307.jpg

修改后的代码如下:

//抽象类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();
    }
}

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

1

0 学习 · 11489 问题

查看课程