超类抽象类中的具体方法

时间:2012-12-24 07:30:22

标签: java oop template-method-pattern

我有一个抽象类Shape,一些子类和一些方法来计算面积,周长和绘制被覆盖的形状。 我试图在这个应用程序的抽象类中找到一个模板方法,但我想不出任何。 我还没有找到任何对所有形状都相同的常用方法,并且会在GUI上产生一些东西。 我想在抽象类中有一个方法来比较两个形状的区域但我无法理解如何做到这一点,因为我认为我不能使用它(指的是类的实例)一个抽象的类。 所有形状都有什么共同之处,我的模板方法是什么? 谢谢。

2 个答案:

答案 0 :(得分:0)

当然你可以做areaEquals:

public abstract class Shape {
    public boolean areaEquals(Shape otherShape) {
        return this.area() == otherShape.area();
    }

    public abstract double area();
}

整个想法是面积计算是每个形状特有的,但比较对于可以计算自己面积的所有形状都是通用的。

答案 1 :(得分:0)

此处您的compareArea()是模板方法:

public class Test {
public static void main(String[] args) {
    Shape rec = new Rectangle();
    Shape sqr = new Square();
    int diff = rec.compareArea(sqr);
    System.out.println(diff);
 }
}

abstract class Shape{
public int compareArea(Shape otherShape){
    return computeArea() - otherShape.computeArea();
 }
abstract int computeArea();
}
class Square extends Shape{
int s = 2;
@Override
int computeArea() {
    return s * s;
 }
}
class Rectangle extends Shape{
int l = 3;
int b = 4;
@Override
int computeArea() {
    return l * b;
 }
}