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来修饰,所以之前的方法不可行,猜测应该是实现功能的类要写在主类外,才能正常的调用和运行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端