【问题标题】:Printing arraylist with toString override and inheritance?使用 toString 覆盖和继承打印 arraylist?
【发布时间】:2014-10-07 14:46:19
【问题描述】:

背景信息:我有一个 ellipse 类,它从 Shape 类继承颜色,还有一个 circle 类从 ellipse 类继承。

在圆形和椭圆形中,我必须重写 toString 方法并连接一个显示“圆形”或椭圆形以及形状的面积、周长和颜色的字符串。

在我的主文件中,我现在需要打印整个形状数组列表“调用每个存储对象的 toString 方法。”

我不知道如何告诉它在圆时调用 toString 来表示圆形,而在椭圆时调用 toString 来表示椭圆。

@Override 
public String toString()
{
    return "Ellipse" + " " + super.getColor() + " "+ this.calcArea() + " " + this.calcPerimeter();
}

这是我的椭圆 toString 覆盖方法。

【问题讨论】:

    标签: java inheritance arraylist overriding tostring


    【解决方案1】:

    多态是你的朋友。如果对象的类型为 circle ,则动态绑定将为您执行此操作,将调用 circle toString 。如果对象是椭圆类型,则将调用椭圆 toString。

    换句话说

    public Class Shape {
        @Override 
        public String toString()
        {
            return "Shape";
        }
    }
    
    public Class Circle extends Shape {
        @Override 
        public String toString()
        {
            return "Circle";
        }
    }
    
    public Class Ellipse extends Circle {
        @Override 
        public String toString()
        {
            return "Ellipse";
        }
    }
    
    // This is in main
    Shape s1 = new Shape();
    Shape s2 = new Circle();
    Shape s3 = new Ellipse();
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);
    

    将打印

    Shape
    Circle
    Ellipse
    

    【讨论】:

    • 所以它就像通过 arraylist 和 System.out.println(shapes); (形状是我的数组列表的名称)??
    • "编译器会为你做这些" 不是编译器会处理它,而是运行时的 JVM 本身。编译器只能使用静态绑定,而这里发生的是动态绑定(多态性)。
    • 如果我试图打印出数组列表,但我不确定数组列表中的下一个形状是什么?例如 AArraylist 的内容可能是 Circle、Rectangle、Ellipse、Circle。我必须做 s.o.p(new Shape());或者它可以只是数组列表的名称和 JVM 处理它实际上是哪个形状并调用该 toString?
    • 要呈现多态性,您可能应该从 Shape 引用中调用 toString,这些引用将包含 Shape CircleEllipse。这样 OP 将看到 toString 的调用代码取决于所持有的对象,而不是引用类型本身。
    • @Exziled JVM 将为您处理它。你为什么不自己测试一下?如果您没有安装 Java 编译器,那么有在线编译器,例如 ideone.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多