Конкретный метод в суперклассе-абстрактном классе

У меня есть абстрактный класс Shape, несколько подклассов и некоторые методы для вычисления площади, периметра и рисования формы, которые переопределены. Я пытаюсь найти метод шаблона в абстрактном классе для этого приложения, но я не могу придумать ни одного. Я не нашел каких-либо общих методов, которые были бы одинаковыми для всех фигур и производили бы что-то в графическом интерфейсе. Я думал о том, чтобы иметь метод в абстрактном классе для сравнения областей двух фигур, но я не могу понять, как это сделать, так как я думаю, что не могу использовать это (ссылаясь на экземпляр класса) в абстрактный класс. Есть ли что-то общее для всех форм и каким может быть мой метод шаблона? Спасибо.


person user1926116    schedule 24.12.2012    source источник
comment
Вам нужно что-то вроде Shape#compareByArea(Shape anotherShape) { double area1 = this.getArea(); double area2 = anotherShape.getArea(); return (area1 > area2) ? 1 : (area1 < area2) ? -1 : 0; }?   -  person Luiggi Mendoza    schedule 24.12.2012
comment
Как вы думаете, зачем вам нужен шаблонный метод?   -  person Burhan Khalid    schedule 25.12.2012
comment
Задача состоит в том, чтобы использовать шаблон метода шаблона, и я не вижу, где я могу его использовать.   -  person user1926116    schedule 26.12.2012


Ответы (2)


Конечно, вы можете сделать areaEquals:

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

    public abstract double area();
}

Вся идея состоит в том, что вычисление площади специфично для каждой фигуры, но сравнение является общим для всех фигур, которые могут вычислять свою собственную площадь.

person davidrac    schedule 24.12.2012

здесь ваш 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;
 }
}
person vishal_aim    schedule 24.12.2012