- Ситуативный (ad-hoc) полиморфизм: различные реализации метода с одним именем для ограниченного набора заданных аргументов и их комбинаций.
class Student {
public void say(String text) {
System.out.println(text);
}
public void say() {
say("Arte et humanitate, labore et scientia!");
}
public static void main(String[] args) {
Student student = new Student();
student.say();
student.say("Ignorantia nоn est argumentum!");
}
}
Output:
Arte et humanitate, labore et scientia!
Ignorantia nоn est argumentum!
- Параметрический полиморфизм: определение функции или типа данных обобщенно, чтобы работа со значениями происходила единообразно.
class Wrapper<T> {
private T t;
public void wrap(T t) {
this.t = t;
System.out.println("I'm wrapping " + t.getClass());
}
public static void main(String[] args) {
Wrapper wrapper = new Wrapper();
wrapper.wrap("Book");
wrapper.wrap(5);
wrapper.wrap(new Socket());
}
}
Output:
I'm wrapping class java.lang.String
I'm wrapping class java.lang.Integer
I'm wrapping class java.net.Socket
- Полиморфизм подтипов (включения): если функция определена для типа SyperType, то её корректно использовать и для всех типов SybType extends SuperType (SuperType :> SubType).
class Int {
public static void sayIntValue(Number number) {
System.out.println("int value of " + number + " is " + number.intValue());
}
public static void main(String[] args) {
sayIntValue(new Integer(10));
sayIntValue(new Double(36.6));
sayIntValue(new Float(22.1));
}
}
Output:
int value of 10 is 10
int value of 36.6 is 36
int value of 22.1 is 22
Комментариев нет:
Отправить комментарий