evgeniy8705
@evgeniy8705
Повелитель вселенной

Зачем создавать ссылку на объект?

Начал осваивать Java. Все никак не могу понять, для чего в примерах создается ссылка на объект? Почему нельзя обойтись без этой ссылки? Для чего она?

abstract class Figure {
    double dim1;
    double dim2;

    Figure(double a, double b) {
        dim1 = a;
        dim2 = b;
    }

    abstract double area();
}

class Rectangle extends Figure {
    Rectangle(double a, double b) {
        super(a, b);
    }

    double area() {
        System.out.println("В области четырехугольника.");

        return dim1 * dim2;
    }
}

class Triangle extends Figure {
    Triangle(double a, double b) {
        super(a, b);
    }

    double area() {
        System.out.println("В области треугольника.");

        return dim1 * dim2 / 2;
    }
}

class Example {
    public static void main(String[] args) {
        Rectangle r = new Rectangle(9, 5);
        Triangle t = new Triangle(10, 8);
        
        Figure figref; // Вот эта ссылка
        
        figref = r;
        System.out.println("Площадь равна " + figref.area());
        
        figref = t;
        System.out.println("Площадь равна " + figref.area());
    }
}


Для чего делать так? Почему бы просто не использовать эту ссылку и сделать так:
class Example {
    public static void main(String[] args) {
        Rectangle r = new Rectangle(9, 5);
        Triangle t = new Triangle(10, 8);

        System.out.println("Площадь равна " + r.area());
        System.out.println("Площадь равна " + t.area());
    }
}
  • Вопрос задан
  • 217 просмотров
Пригласить эксперта
Ответы на вопрос 2
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Практически - ни для чего. Просто наглядный пример для объяснения полиморфизма и наследования.
Ответ написан
Комментировать
@medin84
software developer
К примеру если есть необходимость положить объекты в один список.
Вы можете сделать это так List < Object > , но в этом случае у вас нет (без условий и cast) возможности обратится к методу area.
тогда надо делать List < Figure > и можно будет вызывать area
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы