понедельник, 9 июня 2014 г.

Виды полиморфизма


  • Ситуативный (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

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

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