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