Полиморфизм и абстрактные классы на JavaJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Полиморфизм и абстрактные классы на Java

Сообщение Anonymous »

Допустим, у меня есть следующие классы: < /p>
public abstract class Animal {
public abstract void talk();
}
class Dog extends Animal {
@Override
public void talk() {
System.out.println("Woof");
}
}

class Cat extends Animal {
@Override
public void talk() {
System.out.println("Meow");
}
}
< /code>
Теперь я создаю новый класс для тестирования, и я хочу метод, который будет вызвать соответствующий метод Talk () для типа животного, проходящего в качестве параметра. Затем я называю метод на Objects Dog и Cat. < /P>
public class Test {

public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();

Test t = new Test();
t.makeAnimalTalk(dog);
t.makeAnimalTalk(cat);

}

public void makeAnimalTalk(Animal animal) {
animal.talk();
}
}
< /code>
И это работает. Но что меня беспокоит: < /p>
public void makeAnimalTalk(Animal animal) {
animal.talk();
}
< /code>
Параметр, который здесь передается животным типа класса, которое является абстрактным классом. Я очень хорошо знаю, что мы не можем сделать объекты абстрактного класса, так что же такое животное? Как это работает? Программа работает, даже если я делаю что -то вроде этого: < /p>
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
< /code>
Очень извините, если это глупый вопрос, кстати. Я приезжаю из C ++ и, насколько я знаю, это не сработает на языке. Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/794 ... es-in-java
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»