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来修饰,所以之前的方法不可行,猜测应该是实现功能的类要写在主类外,才能正常的调用和运行。
java课后题圆形类三角形类矩形类继承抽象形状类,依旧无法运行的原因
原文:https://www.cnblogs.com/wenjis-nine-life-cat/p/14720244.html