Java super class toString() and constructor calling
我知道有类似的帖子,但没有一个完全适合我想做的。我是一个更新的程序员,刚刚开始阅读Java的超级类。我已经创建了一个名为shape的超级类。然后我创建了一个名为circle的子类。我在这里遇到了两个困难,从我的子类ToString方法调用我的父类中的ToString方法,以及从我的子类到我的超类中的一个构造函数。我在下面提供了我的超级类、子类和主要测试方法。
形状类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | public class Shape { private boolean isFilled; private String color; public Shape() { this.isFilled = true; this.color ="Green"; } public Shape(boolean x, String y) { this.isFilled = x; this.color = y; } public void setFilled(boolean fill) { this.isFilled = fill; } public boolean getFilled() { return this.isFilled; } public void setColor(String x) { this.color = x; } public String getColor() { return this.color; } @Override public String toString() { String s ="Filled:" + this.isFilled +" "; String t ="Color:" + this.color; String u = s + t; return u; } } |
圆圈:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | public class Circle extends Shape { private double radius; public Circle() { this.radius = 1; } public Circle(double x) { this.radius = x; } public Circle(double radius, boolean isFilled, String Color) { super(isFilled, Color); this.radius = radius; } public void setRadius(double radius) { this.radius = radius; } public double setRadius() { return this.radius; } public double getArea() { double area = this.radius * this.radius * Math.PI; return area; } @Override public String toString() { String x ="Radius:" + this.radius +" "; String y ="Area:" + getArea() +" "; String z = x + y; return z; } } |
号
测试形状:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | public class TestShape { public static void main(String[] args) { Circle c1 = new Circle(2.67); System.out.println("c1:"); System.out.println(c1.toString()); System.out.println(); Circle c2 = new Circle(3, false,"Red"); System.out.println("c2:"); System.out.println(c2.toString()); System.out.println(); } } |
预期输出:
1 2 3 4 5 6 7 8 9 10 11 |
。
实际输出:
您的
1 2 3 4 5 6 7 8 9 |
即半径和面积。
如果要添加父结果,需要使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
号
您正在重写toString()方法,但不调用超级类中的方法。您需要在子类中使用以下方法。
1 2 3 4 5 6 7 8 9 10 |
假设您希望调用父类ToString(),而不是子类,那么在子类中重写了ToString()方法(在main()方法中显式调用),这是正常的情况。
使用父控制器构造子类的事实不会影响ToString(),因为您显式调用子类的重写ToString()。
如果希望父ToString()方法是执行的方法,可以调用并打印