Очевидно, что объект родительского класса может содержать ссылку на дочерний элемент, но разве это не выполняется в случае параметризованного сбора ??
например:
Car class is parent of Sedan
Итак
public void doSomething(Car c){
...
}
public void caller(){
Sedan s = new Sedan();
doSomething(s);
}
очевидно действителен
Но
public void doSomething(Collection<Car> c){
...
}
public void caller(){
Collection<Sedan> s = new ArrayList<Sedan>();
doSomething(s);
}
Не компилируется
Может кто-нибудь указать, почему? а также, как реализовать такой сценарий, в котором функция должна выполнять итерацию по Коллекции родительских объектов, изменяя только поля, присутствующие в родительском классе, используя методы родительского класса, но вызывающие методы (скажем, 3 различных метода) передают коллекцию три разных подтипа ..
Конечно, это прекрасно скомпилируется, если я сделаю так:
public void doSomething(Collection<Car> c){
...
}
public void caller(){
Collection s = new ArrayList<Sedan>();
doSomething(s);
}