有效地重用多态方法的多个实现共同的代码

时间:2015-01-26 10:15:42

标签: java polymorphism

我有一个形状。形状有圆形,三角形,正方形。

class interface Shape(){
   print();
   sort(); 
}

如果circletrianglesquare延伸shape,并且sort()的代码对于所有形状几乎相同,我该如何使用{ {1}}没有在圆形,三角形和方形中添加正文实现?

我可以在sort()中有一个具体的实现,但我总是被告知不要这样做。

2 个答案:

答案 0 :(得分:1)

使用abstract class,您可以 实施 sort()方法(class行为)和定义 print()方法(interface行为):

public abstract class AbstractShape
{
    public abstract void print();

    public void sort(AbstractShape[] shapes) {
        // make your own implementation -> sort shapes
    }
}

public class Circle extends AbstractShape
{
    @Override public void print() {
        System.out.println("I'm a circle");
    }
}

public class Triangle extends AbstractShape
{
    @Override public void print() {
        System.out.println("I'm a triangle");
    }
}

public class Square extends AbstractShape
{
   @Override public void print() {
        System.out.println("I'm a square");
    }
}

答案 1 :(得分:0)

您如何定义不同类型的形状顺序?

如果它是一个任意的顺序,例如 - Circles first,那么Triangles,最后是Squares - 你的比较方法必须知道所有这些类型。

如果您根据所有形状(例如区域)共享的某些属性定义顺序,则可以在Shape类中实现比较方法,而不需要知道任何子类。

顺便说一句,如果您的sort()方法应该对形状集合进行排序,则不需要它。使用Collections.sort并实施Comparator<Shape>Comparable<Shape>