2014-10-07 78 views
-1

背景信息:我有一个类椭圆,它继承了Shape类中的颜色和继承自椭圆类的圆类。使用toString重写和继承来打印arraylist?

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

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

我不知道如何告诉它如果它是一个圆形时为圆形调用toString,在椭圆形时是为椭圆形形式的toString。

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

这是我的椭圆toString重写方法。

回答

1

多态性是你的朋友。如果一个对象的类型是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 
+0

因此,它是为做一个对通过ArrayList和 的System.out.println(形状)一样简单; (形状是我的数组列表的名字)? – Exziled 2014-10-07 14:49:33

+0

“*编译器会为你做这件事*”它不是编译器,它将处理它,而是JVM本身在运行时。编译器只能使用静态绑定,而这里发生的是动态绑定(多态)。 – Pshemo 2014-10-07 14:55:32

+0

@Pshemo感谢那个catch更新了它。 – StackFlowed 2014-10-07 14:57:25