Мне трудно понять этот код. Phone13 является родительским интерфейсом для классов SamSung и HTC. И VO является родительским классом для SamSungVO и HTCVO. Теперь я создаю экземпляр SamSung для моего интерфейса myPhone13. Затем я создаю экземпляр SamSungVO. Я также передал его VO и поместил его в метод myPhone.info (myVO).IOC/JDBC/DAO - Как работает этот код?
Я не могу понять, что хотя myPhone.info (VO myVO) принимает VO как параметр, я реализовал интерфейс myPhone с SamSung Class. Таким образом, похоже, что я поместил объект VO в метод, который намерен принять объект SamSung в качестве его параметра. Я начинаю удивляться. Как этот экземпляр автоматически передается из VO в SamSungVO?
Я думал, что не разрешено помещать родительский объект в качестве аргумента для метода, который принимает дочерний экземпляр в качестве его параметра.
package others;
class VO{}
interface Phone13 <E extends VO>{
public void info(E myVO);
}
class SamSung implements Phone13<SamSungVO>{
@Override
public void info(SamSungVO myVO) {
System.out.println(myVO.name);
}
}
class SamSungVO extends VO{
String name = "SamSung";
}
class HTC implements Phone13<HTCVO>{
@Override
public void info(HTCVO myVO) {
System.out.println(myVO.name);
}
}
class HTCVO extends VO{
String name = "HTC";
}
public class MyIOC02 {
public static void main(String[] args) {
Phone13 myPhone = null;
// When I need to use SamSung
myPhone = new SamSung();
VO myVO = new SamSungVO();
myPhone.info(myVO);
}
}