【发布时间】:2017-03-06 12:36:29
【问题描述】:
我很难理解这段代码。 Phone13 是 SamSung 和 HTC 类的父接口。 VO 是 SamSungVO 和 HTCVO 的父类。 现在,我为我的界面 myPhone13 创建了一个三星实例。然后,我创建了一个 SamSungVO 实例。我也将它投射到 VO 并放入 myPhone.info(myVO) 方法。
我无法理解,虽然 myPhone.info(VO myVO) 以 VO 作为参数,但我已经用 SamSung 类实现了 myPhone 接口。所以看起来我将一个 VO 对象放入一个打算以三星对象作为其参数的方法中。我开始怀疑。这个实例如何自动从 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);
}
}
【问题讨论】:
标签: jdbc casting inversion-of-control dao