Subtyping and the Substitution P

2017-04-11  本文已影响0人  怪物猎人

Subtyping

Subtyping is transitive, meaning that if one type is a subtype of a second, and the second is a subtype of a third, then the first is a subtype of the third.If one type is a subtype of another, we also say that the second is a supertype of the first.We also say, trivially, that every type is a subtype of itself.

public class Subtyping {
    public static void main(String[] args) {
        Crow crow = new Crow();
        crow.shout();
        crow.fly();
        crow.sleep();
    }
}


class Animal {
    public void sleep() {
        System.out.println("I am sleeping");
    }
}

class Bird extends Animal{
    public void fly() {
        System.out.println("I am flying");
    }
}

class Crow extends Bird {
    public void shout() {
        System.out.println("I am crow");
    }
}


</br>

Substitution Principle

a variable of a given type may be assigned a value of any subtype of that type, and a method with a parameter of a given type may be invoked with an argument of any subtype of that type.

interface Collection<E> {
    public boolean add(E elt);
    ...
}

List<Number> nums = new ArrayList<Number>();
nums.add(2);
nums.add(3.14);
assert nums.toString().equals("[2, 3.14]");

Here, subtyping is used in two ways for each method call. The first call is permitted because <strong>nums has type List<Number>, which is a subtype of Collection<Number>, and 2 has type Integer (thanks to boxing), which is a subtype of Number</strong>. The second call is similarly permitted. In both calls, the E in List<E> is taken to be Number.

上一篇下一篇

猜你喜欢

热点阅读