Полиморфизм и абстрактные классы на 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();
Я приезжаю из C ++ и, насколько я знаю, это не сработает на языке.

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

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