问个关于java接口的简单问题

wanglin824 2004-08-16 04:12:16
这是一个接口:
package com.artima.security.doer;

public interface Doer {

void doYourThing();
}

这是实现了接口的一个类:
public class Friend implements Doer {

private Doer next;
private boolean direct;

public Friend(Doer next, boolean direct) {
this.next = next;
this.direct = direct;
}

public void doYourThing() {

if (direct) {

next.doYourThing();
}
else {
AccessController.doPrivileged(
new PrivilegedAction() {
public Object run() {
next.doYourThing();
return null;
}
}
);
}
}
}

我不明白private Doer next;怎么能定义一个接口的变量,而且next.doYourThing();还调用了接口的方法,doYourThing在接口里根本都没实现阿?
...全文
181 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
wanglin824 2004-08-17
  • 打赏
  • 举报
回复
偶懂了,结贴!
htyx 2004-08-17
  • 打赏
  • 举报
回复
这里只是定义了一个变量,而没有进行构造。就是说next是一个实现了doer接口的对象而这个对象的实例化还要调用new Friend(),或另外的实现接口的类的构造函数。而在实现接口的类里doYourThing();一定已经实现了。有些乱?这样说吧Friend(Doer next, boolean direct)里Doer next的意思就是说。要传入一个对象,该对象已经实现了Doer接口,至于具体类型编译器就不要管了,反正我这里只用接口定义的方法。
bxts 2004-08-17
  • 打赏
  • 举报
回复
这种用法很常见啊,建议楼主看一下《JAVA与模式》,其中有一个规则叫做“依赖倒转原则”比较深入的讲解了这个用法。
fengchuiliu 2004-08-16
  • 打赏
  • 举报
回复
接口到底是个什么样的东西, 偶到现在都没有一个感性的认识。 只是知道他想汽车的刹车一样。
wanglin824 2004-08-16
  • 打赏
  • 举报
回复
那我怎么知道调用的具体是哪个类的方法呢?
draco2002 2004-08-16
  • 打赏
  • 举报
回复
接口自己本来就不定义任何实现,它们定义的方法是不含方法体的!!

你可以把变量定义成使用接口的对象引用而不是类的类型。任何实现了所声明接口的类的实例都可以被这样的一个变量引用。当你通过这些引用调用方法时,在实际引用接口的实例的基础上,方法被正确调用。这是接口的最显著特性之一
wanglin824 2004-08-16
  • 打赏
  • 举报
回复
还是不太明白~~~楼上的意思是向上转型吧。
Tasia 2004-08-16
  • 打赏
  • 举报
回复
Doer是接口,可能有很多会有一个或多个类都实现它。用private Doer next的话, 每个implement Doer的类的object都可以用来添加这个鍡链表中(从Friend的构造函数可以看出它是实现一个链表的功能)。
gaossnust 2004-08-16
  • 打赏
  • 举报
回复
接口不能实现接口对象,但是可以声明接口变量。
next.doYourThing()调用的是构造函数中传递过来的对象的方法,该对象实现了Doer 接口。
plusjava 2004-08-16
  • 打赏
  • 举报
回复
在类中实现了doYourThing()方法的定义,而且一定是要public的
wanglin824 2004-08-16
  • 打赏
  • 举报
回复
哪个地方显示了实现接口Doer了呢?

还有如果说是调用Friend.doYourThing()那为什么不写成private Friend next呢?
steel007 2004-08-16
  • 打赏
  • 举报
回复
public Friend(Doer next, boolean direct) {
this.next = next;
this.direct = direct;
}
对象的构造函数中需要对next作初始化,传入一个实现了接口Doer的对象。

看样子,应该是后一个参数direct表示是否next已指向正确的对象。
snap2008cn 2004-08-16
  • 打赏
  • 举报
回复
类implement 接口Doer
Friend中实现了doYourThing
next.doYourThing();其实就是调用Friend.doYourThing()(理论可能不对,可以这样理解)

62,634

社区成员

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

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