2015-04-24 3 views
0

Я знаю, что это дублирующий вопрос и немного «мягкий», но мне не понравилось ни одно из других объяснений, и хотелось бы услышать простой ответ, который не обобщает настолько, чтобы запутать.Что такое полиморфизм, просто объясняется?

Например What is polymorphism, what is it for, and how is it used?

полиморфизм только «будучи в состоянии выполнять функции (или это методы?) Интерфейса, такие как сложение, вычитание, и т.д., на объектах различных типов данных, таких как целые числа, поплавки , и т.д"?

В основном это перегрузка оператора? Или шаблоны?

+0

Веб-сайт 'Programmers' StackExchange (http://programmers.stackexchange.com) может стать для вас лучшим местом в этом вопросе. – narner

+0

@narner: вопрос в порядке. Это вопрос программирования. – IAbstract

+0

@narner - Даже столовая бирка компьютерных наук была бы хорошим местом для этого. –

ответ

1

Полиморфизм - просто причудливое слово, что означает, что вы можете использовать более общий термин для обозначения конкретного типа объекта.

Это идет рука об руку с интерфейсов

Интерфейс: То же слово, несколько ароматов

Вместо того чтобы сказать: «Я получил новый Vauxhall Corsa», вы могли бы просто сказать: «Я получил новая машина". Это утверждение также было бы правдой, если бы вы получили Ford Fiesta, так как это тоже автомобиль. Гибкость (полиморфизм) английского слова «автомобиль» означает, что вам не нужно точно указывать, какой именно автомобиль. Ваша аудитория будет знать, что у вас есть современное приспособление на вашем переднем приводе, которое предназначено для звукового сигнала, управления и движения по дороге, хотя точные механизмы двигателей Vauxhall и Ford могут отличаться друг от друга.

полиморфизм принимает этот интерфейс и позволяет обратиться к вашему Ford Fiesta как просто автомобиль:

Car car = new Ford(); 

От this blog:

Полиморфизм означает использование суперкласса переменной для обозначения подкласса объекта. Например, рассмотрим эту простую иерархию наследования и код:

abstract class Animal { 
    abstract void talk(); 
} 
class Dog extends Animal { 
    void talk() { 
     System.out.println("Woof!"); 
    } 
} 
class Cat extends Animal { 
    void talk() { 
     System.out.println("Meow."); 
    } 
} 

Полиморфизм позволяет хранить ссылку на объект Dog в переменной типа животных, как:

Animal animal = new Dog(); 

PS Учитывая другие ответы, вы также можете узнать the difference between an abstract class and an interface.

+0

Вы могли бы использовать другой пример, чем мой ... hehe –

+1

Извинения - я снял с моего сайта ссылку и не видел вашего ответа до тех пор, пока я не опубликовал –

1

Как правило, способность проявляться во многих формах. В объектно-ориентированном программировании полиморфизм относится к способности языка программирования обрабатывать объекты по-разному в зависимости от их типа или класса данных. Более конкретно, это способность переопределять методы для производных классов. Например, с учетом формы базового класса полиморфизм позволяет программисту определять различные методы области для любого числа производных классов, таких как круги, прямоугольники и треугольники. Независимо от того, какой формой является объект, применение метода области к нему вернет правильные результаты. Полиморфизм считается требованием любого истинного объектно-ориентированного языка программирования (ООПЛ).

Просто метод перегрузка и метод наиважнейший ...

+0

Итак, если у меня есть форма, имеет атрибут type = triangle и другой Shape с атрибутом type = square, и я вызываю метод .area(), функция возвращает разные уравнения в зависимости от типа. Этот полиморфизм? –

+0

В сущности, да. Если вы обрабатываете коллекцию Shape, которая представляет собой смесь разных типов Shape, вызывающая область() для каждого из них будет выполняться полиморфно. –

+0

Эта * "... возможность переопределения методов ..." * неверна. Переопределение метода намного шире, чем намерение полиморфной реализации. Правильной фразой будет «... возможность переопределения методов ...» *. – IAbstract

0

минимальный, но понятнее Java Пример:

public class Animal { 
    public void eat() { 
     System.out.println("wow!"); 
    } 
} 

public class Horse extends Animal { 
    public void eat() { 
     System.out.println("iiiihhh!"); 
    } 
} 

public class Dog extends Animal { 
    public void eat() { 
     System.out.println("whoa!"); 
    } 
} 

Переопределелив их методы родительских классов, как Dog и Horse классы могут изменить свой метод eat() , в то время как вы можете использовать их в более общем виде, вызвав литье в суперкласс Animal.

Animal animal = new Animal(); 
Animal dog = new Dog(); 
Animal horse = new Horse(); 

animal.eat(); // prints "wow!" 
dog.eat();  // prints "whoa!" 
horse.eat(); // prints "iiiihhh!" 

Как сказал Санке, это просто перегрузка метода и переопределение метода.

Смежные вопросы