日期:2014-05-20  浏览次数:20760 次

关于对象多态性
下面的程序不明白,PC类没有实现USB接口,它们都不认识啊,怎么在方法里还能帮接口实现多态性;
就是两者没有直接关系,怎么不出错啊??????????
interface USB
{
public void start() ;

public void stop() ;
}
class PC
{
public void plugin(USB u) 
{
u.start() ;
u.stop() ;
}
};
class UDisk implements USB
{
public void start()
{
System.out.println("U盘开始工作了。。。") ;
}
public void stop()
{
System.out.println("U盘停止工作了。。。") ;
}
};

public class OODemo05
{
public static void main(String args[])
{
new PC().plugin(new UDisk()) ;
}
};

------解决方案--------------------
PC不需要实现USB接口呀,因为PC是通过plugin(USB u) 方法来握着USB接口的,这样,只要是实现了USB接口的东西(例如你的UDisk 类)就可以插到PC上。
------解决方案--------------------
这也是实现多态的一种机制 
java中非基本类型的函数参数传的是引用 
public void plugin(USB u)
{
 u.start() ;
 u.stop() ;
 }
------解决方案--------------------
方法:plugin(USB u),传的参数是USB接口,所以方法体里面就可以调用接口里面的方法,跟PC有没有实现USB接口没有关系的
------解决方案--------------------
PC虽然没有实现USB接口,但PC在使用USB啊,你把USB通过参数传给PC,PC自然就间接获得USB的功能。
相当于你拿着AK47对着敌人射击,可你不是抢啊,好好想一想就明白了。
------解决方案--------------------
PC没有帮接口实现“多样性”,是你传入的接口的一个实现让接口“多样性”,PC没实现接口跟它使用接口没有任何关系,只要你传入一个正确的接口实现程序就会正确的运行。不恰当的比喻,你想看电影直接去电影院(电影的实现类)看就行了,不用自己拍个电影来看。
------解决方案--------------------
探讨

PC虽然没有实现USB接口,但PC在使用USB啊,你把USB通过参数传给PC,PC自然就间接获得USB的功能。
相当于你拿着AK47对着敌人射击,可你不是抢啊,好好想一想就明白了。

------解决方案--------------------
四楼和六楼说的很清楚了,LZ,PC是在利用,
------解决方案--------------------
PC里调用了u.start() ;u.stop() ;两个方法,这两个方法都是USB类的方法,并且USB类的子类重写了这两个方法,这两个方法是UDisk类的,并不是PC的

------解决方案--------------------
PC不需要实现USB接口呀,因为PC是通过plugin(USB u) 方法来握着USB接口的,这样,只要是实现了USB接口的东西(例如你的UDisk 类)就可以插到PC上,方法:plugin(USB u),传的参数是USB接口,所以方法体里面就可以调用接口里面的方法,跟PC有没有实现USB接口没有关系的!