Через абстратный класс:
public abstract class Skot {
public abstract String Zvuk ();
}
public abstract String Zvuk ();
}
public class Korova extends Skot {
@Override
public String Zvuk() {
return "Korova = mu-mu";
}
}
@Override
public String Zvuk() {
return "Korova = mu-mu";
}
}
public class Koza extends Skot {
@Override
public String Zvuk() {
return "Koza = be-be";
}
}
@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";
}
}
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());
}
}
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
Koza = be-be
Dog = gav
Cat = mau
При обьявлении переменных вы указываете более всеобьемлющий тип чем тот, который вы используете при создании переменных в операторе new, однако вызываются именно те методы, которые нужны - происходит это за счет динамического связывания (во время выполнения) в отличие от статического связывания (во время компиляции). Здесь также следует упомянуть знаменитый холивар - "что лучше - абстрактный класс или интерфейс ?".
Комментариев нет:
Отправить комментарий