2012-04-03 3 views
0

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

Теперь могу ли я просто сказать, что когда разные подклассы переопределяют член родительского класса, тогда он дает мне полиморфизм?

Также

class A 
{ 
public void hello() 
{ 
printf("in A"); 
} 
} 

class B extends A 
{ 
public void hello() 
{ 
printf("in B"); 
} 
} 

class C extends A 
{ 
public void hello() 
{ 
printf("in C); 
} 
} 

Теперь, если я сделать

B b=new B(); 
C c=new C(); 
A a1=b; 
A a2=c; 
a1.hello(); 
a2.hello(); 

теперь a1 использовать все члены б те унаследовали от А и, следовательно, печать in B; и аналогично для a2?

ответ

0

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

Другими словами, у вас есть полиморфизм каждый раз, используя базовый класс, вы можете иметь «разные» поведения. Перекрытие это просто способ иметь полиморфизм, но думать об интерфейсе не отменяют любые методы, но вы все равно можете иметь полиморфизм (реализующий интерфейс по-разному)

0

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

Классический примером является Shape базовым классом, который определяет интерфейс (например, одна из функций могут быть .area()), из которых мы имеем Square и Circle производных классов, которые будут как реализовать свои собственные версии интерфейса Shape (например, каждые могут выбрать собственные расчеты .area()). , Если у нас есть коллекция объектов Shape, мы можем работать на них, не утруждая конкретных деталей:

area = 0 
for shape in shapes: 
    area += shape.area() # dispatches to specific shape's area() function 
1

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

Переопределение не означает полиморфизм. Если вы переопределите или не по-прежнему, это может быть полиморфизм. Хорошего определения полиморфизма можно найти здесь: Polymorphism - Define In Just Two Sentences

Полиморфизма является возможностью для объекта варьировать поведения на основе его типа.

Не требуется. например Класс животных реализовал метод Eat (через Mouth), и этот класс позволяет сказать много подклассов. Ни один из подклассов не должен переопределять этот метод, если они не едят ртом.Таким образом, подклассы не внедряют метод Eat и все еще могут найти полиморфизм, который Dog является Animal.

Теперь я могу только сказать, что, когда различные подклассы переопределить элемент родительского класса, то это дает мне полиморфизм?

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

YOUR CODE 

Вы можете попробовать его сами.

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