java课后题圆形类三角形类矩形类继承抽象形状类,依旧无法运行的原因

复制代码
abstract class Shape_basic{
    public abstract void perimeter();//周长
    public abstract void area();//面积
}
class Circle_basic extends Shape_basic{
    public double r;
    @Override
    public void perimeter() {
        System.out.println(4*3.14*r);
    }
    @Override
    public void area() {
        System.out.println(r*3.14*r);
    }
}

class Triangle_basic extends Shape_basic{
    public double length1,length2,length3;
    @Override
    public void perimeter() {
        System.out.println(length1+length2+length3);
    }
    @Override
    public void area() {
    double d = (length1+length2+length3)/2;
    System.out.println(Math.sqrt(d*(d-length1)*(d-length2)*(d-length3)));
    }
}
 class Rect_basic extends Shape_basic{
    public double r_long,r_wider;
    @Override
    public void perimeter() {
        System.out.println(2*(r_long+r_wider));
    }
    @Override
    public void area() {
        System.out.println(r_long*r_wider);
    }    
}
class Test{
    public static void main(String[] arge) {
        Circle_basic c1 = new Circle_basic();
        c1.r = 3;
        c1.area();
    }
}
 
复制代码

开始编写的代码如上,也适合前一篇一样的问题,main无法运行。参考同学的代码发现,前面的四个类都是写在public class Shape{}之外,其后将四个类拿到主类之外以后能正常运行。代码如下

复制代码
package javastudent423;

abstract class Shape_basic{
    public abstract void perimeter();//周长
    public abstract void area();//面积
}
class Circle_basic extends Shape_basic{
    public double r;
    @Override
    public void perimeter() {
        System.out.println("圆形的周长为:"+4*3.14*r);
    }
    @Override
    public void area() {
        System.out.println("圆形的面积为:"+r*3.14*r);
    }
}

class Triangle_basic extends Shape_basic{
    public double length1,length2,length3,length;
    @Override
    public void perimeter() {
        length = length1+length2+length3;
        System.out.println("三角形的周长为:"+length);
    }
    @Override
    public void area() {
    double d = (length1+length2+length3)/2;
    System.out.println("三角形的面积为:"+Math.sqrt(d*(d-length1)*(d-length2)*(d-length3)));
    }
}
 class Rect_basic extends Shape_basic{
    public double r_long,r_wider;
    @Override
    public void perimeter() {
        System.out.println("矩形的周长为:"+2*(r_long+r_wider));
    }
    @Override
    public void area() {
        System.out.println("矩形的面积为:"+r_long*r_wider);
    }    
}
public class Shape{
    public static void main(String[] arge) {
        Circle_basic c1 = new Circle_basic();
        c1.r = 3;
        System.out.println("圆形的半径为:"+c1.r);
        c1.area();
        c1.perimeter();
        Triangle_basic t1 = new Triangle_basic();
        t1.length1 = 3;
        t1.length2 = 4;
        t1.length3 = 5;
        System.out.println("三角形的三边长分别为:"+t1.length1+","+t1.length2+","+t1.length3);
        t1.area();
        t1.perimeter();
        Rect_basic r1 = new Rect_basic();
        r1.r_long = 4;
        r1.r_wider = 3;
        System.out.println("矩形的长宽分别为:"+r1.r_long+","+r1.r_wider);
        r1.area();
        r1.perimeter();
    }
}
 
 
复制代码

对照前一篇解决方法,继承抽象类的类无法用static来修饰,所以之前的方法不可行,猜测应该是实现功能的类要写在主类外,才能正常的调用和运行。

posted @   文姬的九命猫  阅读(184)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示