4-4的编程写完了,但是运行各种错误

4-4的编程写完了,但是运行各种错误


//测试类
public class Test {

    public static void main(String[] args) {
        //创建类的实例,并分别对圆的半径和矩形的长宽进行赋值
        Circle circle=new Circle(3.5);
        Rectangle rectangle=new Rectangle(6,5);
        //调用area()方法,输出结果
        System.out.println(circle.area());
        System.out.println(rectangle.area());
    }
}





//子类
public class Rectangle extends Shape {
    //属性:矩形的长lenghth、宽wide
    private double length;
    private double wide;
    //创建带参构造方法以及无参构造方法
  public Rectangle(){
      
  }
 
  public Rectangle(double length,double wide){
      this.setLength(length);
      this.setWide(wide);
  }
    //创建针对长、宽的赋值和取值方法
    public void setLength(double length){
        this.length=length;
    }
    
    public double getLength(){
        return this.length;
    }
    
    public void setWide(double wide){
        this.wide=wide;
    }
    
    public double getWide(){
        return this.wide;
    }
    //重写父类的area()方法
    public double area(){
        double m=this.getLength()*this.getWide();        
        return m;
    }
}




//子类圆Circle类
public class Circle extends Shape {
  //属性:圆的半径r
  private double r;
  //创建带参构造方法以及无参构造方法
   public Circle(double r){
       this.setR(r);
   }
   
  //创建针对半径的赋值和取值方法
  public void setR(double r){
      this.r=r;
  }
 
  public double getR(){
      return this.r;
  }
    //重写父类中area()方法
  public double area(){
      double n=3.14*r*r;
      return n;
  }
}




//父类
//抽象类Shape,里面含抽象方法area( )
abstract class Shape{
  public abstract void area();
}


老师,我按照要求写了,但是运行报错。。。。。

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,对于方法重写的定义中,子类的返回值可以是父类返回值的子类, 比如,父类的返回值是Animal,子类重写的时候,返回值可以是Cat,但是void和double没有任何继承关系哦!

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

好帮手慕小班 2019-05-17 16:53:10

同学你好,复制运行同学的代码有一个问题,代码中父类的area方法是没有返回值的,例如http://img1.sycdn.imooc.com//climg/5cde757c0001f3fe05030098.jpg

但是子类继承父类后重写的方法又变成了有返回值,例如:

http://img1.sycdn.imooc.com//climg/5cde75ce0001574104430449.jpg

http://img1.sycdn.imooc.com//climg/5cde75e7000126cb05490514.jpg

请注意一个概念-->父类的返回类型必须与被子类重写的方法返回类型必须相同,否则不能称其为重写。

所以建议同学修改父类中的方法返回值,例如:

http://img1.sycdn.imooc.com//climg/5cde76520001fc9704710121.jpg

修改后,运行效果就是如题目所示,没有问题。

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

  • 提问者 鱼儿0001 #1
    谢谢老师,我修改了父类area方法的返回值,运行正常。但是,我记得,子类重写父类的方法,子类的返回值不一定要与父类的返回值相同,是什么父类方法返回值的子类。。。。。所以我就没管
    2019-05-18 16:48:38
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师