Страницы

Поиск по вопросам

пятница, 13 декабря 2019 г.

Почему полиморфизм это удобно? [дубликат]

#java #полиморфизм


        
             
                
                    
                        
                            This question already has answers here:
                            
                        
                    
                
                        
                            Почему необходимо инициализировать коллекции именно так?
                                
                                    (4 ответа)
                                
                        
                        
                            Правильно понять полиморфизм
                                
                                    (1 ответ)
                                
                        
                                Closed 1 год назад.
            
                    
На собеседовании по java спросили - зачем писать, к примеру, 

Фигура треугольник = new Треугольник(), 


а не просто 

Треугольник треугольник = new Треугольник() 


и почему это удобно?
    


Ответы

Ответ 1



Можно здесь много антимоний развести, конечно: что это ни фига не полиморфизьм, что это вообще не об этом, что это и т.д. Отвечу так: Когда пишем: Фигура треугольник = new Треугольник(), мы подразумеваем, что треугольник рассматриваем как наследник класса Фигура (ну или что Треугольник реализует интерфейс Фигура) Что подразумевает, что методы класса/интерфейса Фигура реализованы в классе Треугольник (например Фигура.площадь() - реализуется в разных классах по разному) Кроме этого мы неявно подразумеваем, что возможно где-то есть класс(ы) Четырехугольник, Многоугольник или даже Серо-буро-малиновый-овал, которые также наследники класса Фигура Все это вместе дает нам право сказать, что вместо Треугольник мы переходим на другой уровень абстракции Фигура и можем например рассматривать не отдельные коллекции треугольников, многоугольников, а сразу 1 коллекцию фигур - ну и т.д. и т.п. Далее переходим к заключении, что написавший сию строку прогер - невероятно крут и умеет абстрактно мыслить и все такое прочее.

Ответ 2



Конкретно в указанном вами примере - практически ничем. Если это определение локальной переменной в каком-то методе(вероятней всего так), то правильным ответом будет "потому что в компании принято соглашение писать именно так" - ни о каких "удобствах" тут и речи быть не может- просто субьективное предпочтение людей составлявших это самое соглашение. Если же подразумевалось определение приватного поля класса, то конкретно в случае с Java, насколько помню - в сабкласе после вызова конструктора можно будет подменить этот объект на любой другой объект, реализующий интерфейс Треугольник или являющийся наследником одноименного класса - крайне редко необходимая возможность, в общем-то..

Комментариев нет:

Отправить комментарий