public class Solution {
public static void main(String[] args) {
Rectangle rectangle = new Rectangle(1, 2, 3, 4);
System.out.println(getHeight(rectangle.castToHasHeight()));
System.out.println(getWidth(rectangle.castToHasWidth()));
}
public static double getHeight(HasHeight rectangle) {
return rectangle.getHeight();
}
public static double getWidth(HasWidth rectangle) {
return rectangle.getWidth();
}
public static class Rectangle {
private Point point1;
private Point point2;
public Rectangle(double x1, double y1, double x2, double y2) {
point1 = new Point(x1, y1);
point2 = new Point(x2, y2);
}
public HasHeight castToHasHeight() {
class HasHeightImpl implements HasHeight {
public double getHeight() {
return Math.abs(point1.getY() - point2.getY());
}
}
return new HasHeightImpl();
}
public HasWidth castToHasWidth() {
class HasWidthImpl implements HasWidth {
public double getWidth() {
return Math.abs(point1.getX() - point2.getX());
}
}
return new HasWidthImpl();
}
}
}
kefx
29 уровень
Подскажите пожалуйста, откуда у объекта new HasHeightImpl свойства, вычисляемые в методе getHeight? Мы ведь создаем новый обезличенный объект
Обсуждается
Комментарии (1)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Виктор
18 июля 2021, 19:13
А поля point1 point2 класса Rectangle доступны, т.к. мы находимся внутри Rectangle.
По моему все просто, мы создаем новый класс внутри метода. Он по классификации - внутренний локальный. Имплементируем интерфейс.
+1