понедельник, 16 июля 2018 г.

Полиморфизм в java

Через абстратный класс:
public abstract class Skot {
    public abstract String Zvuk ();
}
public class Korova extends Skot {
    @Override
    public String Zvuk() {
       return "Korova = mu-mu";
    }
}
public class Koza extends Skot {
    @Override
    public String Zvuk() {
       return "Koza = be-be";
    }
}
Через интерфейс:
public interface Skotina {
    String Golos ();
}
public class Dog implements Skotina {
    @Override
    public String Golos() {
       return "Dog = gav";
    }   
}
public class Cat implements Skotina {
    @Override
    public String Golos() {
       return "Cat = mau";
    }   
}
Метод main:
 public class PolimorfizmDemo {

    public static void main(String[] args) {
        Skot korova = new Korova();
        Skot koza = new Koza();
        System.out.println(korova.Zvuk());
        System.out.println(koza.Zvuk());
        ///////////
        Skotina dog = new Dog();
        Skotina cat = new Cat();
        System.out.println(dog.Golos());
        System.out.println(cat.Golos());
    }
}
вывод:
Korova = mu-mu
Koza = be-be
Dog = gav
Cat = mau
При обьявлении переменных вы указываете более всеобьемлющий тип чем тот, который вы используете при создании переменных в операторе new, однако вызываются именно те методы, которые нужны - происходит это за счет динамического связывания (во время выполнения) в отличие от статического связывания (во время компиляции). Здесь также следует упомянуть знаменитый холивар - "что лучше - абстрактный класс или интерфейс ?".

Комментариев нет:

Отправить комментарий

Взаимодействие между приложениями и Watch Service

Взаимодействие между разными приложениями Java можно сделать с помощью файловой системы, базы данных и JMS. Рассмотрим случай ФС - в Java ...