Java子类调用父类toString()与构造方法问题求助
解决子类调用父类构造方法与toString()的问题
嘿,作为Java新手刚接触继承时碰到这些问题真的超常见!别担心,我这就结合你提到的Shape父类和Circle子类,一步步给你讲清楚这两个关键点~
一、子类构造方法中调用父类构造方法
在Java里,子类构造方法默认会隐式调用父类的无参构造,但如果你想显式指定调用(比如父类有带参数的构造,或者你想明确控制逻辑),就用super()关键字,而且必须放在子类构造方法的第一行!
示例代码:
父类Shape
public class Shape { private String color; // 无参构造方法 public Shape() { this.color = "white"; System.out.println("Shape无参构造被调用"); } // 带参数构造方法 public Shape(String color) { this.color = color; System.out.println("Shape带参构造被调用,颜色:" + color); } // getter方法 public String getColor() { return color; } @Override public String toString() { return "Shape{color='" + color + "'}"; } }
子类Circle
public class Circle extends Shape { private double radius; // 子类无参构造:显式调用父类无参构造(也可以省略super(),Java会自动调用) public Circle() { super(); this.radius = 1.0; System.out.println("Circle无参构造被调用,半径:" + radius); } // 子类带参构造:调用父类带参构造 public Circle(String color, double radius) { super(color); // 必须放在构造方法第一行 this.radius = radius; System.out.println("Circle带参构造被调用,半径:" + radius); } }
二、子类toString()方法中调用父类toString()
当你重写子类的toString()时,如果想把父类的属性信息也包含进去,直接用super.toString()就能调用父类的toString方法,再拼接子类自己的属性就搞定啦!
给Circle类添加重写的toString():
@Override public String toString() { // 先获取父类的toString结果,再拼接子类的radius属性 return super.toString() + ", Circle{radius=" + radius + "}"; }
测试主方法验证
public class TestShape { public static void main(String[] args) { Circle circle1 = new Circle(); System.out.println(circle1.toString()); Circle circle2 = new Circle("red", 5.0); System.out.println(circle2.toString()); } }
输出结果:
Shape无参构造被调用 Circle无参构造被调用,半径:1.0 Shape{color='white'}, Circle{radius=1.0} Shape带参构造被调用,颜色:red Circle带参构造被调用,半径:5.0 Shape{color='red'}, Circle{radius=5.0}
这样你就能清晰看到父类构造和toString方法是怎么被子类正确调用的啦!如果还有细节搞不懂,随时问~
内容的提问来源于stack exchange,提问作者hotrod28
相关产品推荐
相关产品推荐

