当前位置: 代码迷 >> J2SE >> 这段程序为何不报错
  详细解决方案

这段程序为何不报错

热度:78   发布时间:2016-04-23 19:48:02.0
这段程序为什么不报错?
今天看了一段程序,初学java有点看不懂。希望您给新人一点帮助。代码如下:

interface B
{
public void f();
}

class C implements B
{
public void f()
{
System.out.println("f");
}
}

class D
{
public static B get()
{
return new C();
}
}

请问在get()方法中,return的是一个对象,为什么get()方法的返回值却是一个接口呢?想了好久,自认为有点像多态的情况,可是,还是搞不懂,这个究竟有什么意义啊?求指点,谢谢啦!

------解决思路----------------------
因为C对像实现了B接口。

举个例子来说吧,你家里需要一个清洁工,你给清洁工的定义(即清洁工接口)是:能扫地(接口定义的函数)就行。那么,你去外面找清洁工,人家返回给你的只要能投扫地就可以了,即可以是一个会扫地的阿姨(实现了清洁工接口的清洁工实例),也可以是一个会扫地的机器 人(实现了清洁工接口的扫地机器人实例)。
------解决思路----------------------
因为你方法定义的返回类型就是B,而你return的是C,想当然的以为是C,这是面向接口的思想。
你返回对象定义为C那就是C了。
------解决思路----------------------
面向接口编程。你的方法签名规定返回的是一个接口类型,而实际返回的是某个具体的实现类。
例如:你的某个方法要求返回“人”类型的,可是你最后返回的是个“学生”
学生也是人啊。好处就是,将来你更改了程序,返回一个老师,那你的方法签名的返回值类型是不用改的。
------解决思路----------------------
这个是没有问题的,你的get方法返回的类型是接口,而接口实用类被类实现的,所以你返回一个接口的实现类,是合情合理的,自己可以不放这样理解一下:假如你要求返回的是人这个接口类型,如果get方法返回的是学生,那不就是合理吗?
  相关解决方案