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? Мы ведь создаем новый обезличенный объект
Обсуждается
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Long_byte
22 мая 2024, 15:01
задача статического метода getHeight в классе Solution принять в параметры объект HasHeight а этот объект возвращает метод объекта rectangle.castToHasHeight() именно в этом методе определен класс объекта HasHeight который импементил интерфейс HasHeight а метод getHeight в классе Solution вызывает метод объекта HasHeight rectangle.getHeight который возвращает выражение return Math.abs(point1.getY() - point2.getY());
0
Виктор
18 июля 2021, 19:13
По моему все просто, мы создаем новый класс внутри метода. Он по классификации - внутренний локальный. Имплементируем интерфейс.
А поля point1 point2 класса Rectangle доступны, т.к. мы находимся внутри Rectangle.
А поля point1 point2 класса Rectangle доступны, т.к. мы находимся внутри Rectangle. +1