问一个关于接口申明方法的问题。

philo_xu 2008-01-14 12:12:48
我的代码如下:

interface Machine
{
void run();
}

class Person
{
void run()
{
System.out.println("run");
}
}

class Robot extends Person
{
private class MachineHeart implements Machine
{
public void run()
{
System.out.println("MachineHeart run");
}
}
Machine getMachine()
{
return new MachineHeart();
}
}


class Test
{
public static void main(String[] args)
{
Robot robot = new Robot();
Machine m = robot.getMachine();
m.run();
robot.run();
}
}


为什么可以用
Machine getMachine()
{
return new MachineHeart();
}
这样写是什么意思?我感觉这个里面很绕。我理不清楚,望高手指教!
...全文
77 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
philo_xu 2008-01-14
  • 打赏
  • 举报
回复
我只见过用一个类名申明一个变量。怎么用一个接口名申明一个方法也可以吗?
philo_xu 2008-01-14
  • 打赏
  • 举报
回复
Machine getMachine()

为什么能这样写?
kerry_lulu 2008-01-14
  • 打赏
  • 举报
回复
通过这样能够返回一个内部类的实例,如果不这样写就得不到Machine对象了
c2one 2008-01-14
  • 打赏
  • 举报
回复
你把MachineHeart这个类放到外面,不当成内部类来看就清楚多了~`
他的目的就是同时想在Robot里面获得执行Machine和Person的方法!
dracularking 2008-01-14
  • 打赏
  • 举报
回复
这就是多态

因为在有些情况下你可能会用到同一个接口的不同实现
把接口声明为类型可方便扩展,统一使用等。
如List接口 ArrayList(适合随机访问) 和 LinkedList(适合添加删除)是它的两种实现
某种场合就需要用到以下方法

public void dealList(List list)


它能接受任何实现了List接口的实例作为参数
这方法关心的是 传过来的是不是实现了List接口的实现 而不去关心它是怎么实现的
它只要拿来直接用就可以了
kerry_lulu 2008-01-14
  • 打赏
  • 举报
回复
Machine getMachine()
Machine是返回类型

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧