Код: Выделить всё
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();
Подробнее здесь: https://stackoverflow.com/questions/794 ... es-in-java