java 监视器方面的问题 当有事件发生时 接口立即通知监视器调用方法(实现其接口的方法) 接口回调这一过程对程序是不可见的 我想知道接口回调在这里是怎么体现出来的 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 例子: 监听button。当button被鼠标按了, 就调用监听button的方法public void actionPerformed(ActionEvent arg0), 接着执行里面的语句。(如果有多个组件需要通过ActionListener进行监听,那么只需要在方法:public void actionPerformed(ActionEvent arg0){ if (arg0.getSource().equals(button1)){} if (arg0.getSource().equals(button2)){} } 其中,2个if就是用于判断用户点击的是哪一个按钮 ) 就像你去打电玩一样,按了哪一个键,就执行那个键相对应的方法。 比如 如果在两个按钮btn1,btn2上添加了鼠标点击事件监听器MouseListener,即btn1.addMouseListner(new MouseMonitor()); btn2.addMouseListener(new MouseMonitor());这个监听器类写为class MouseMonitor extends MouseAdapter {//在按钮上的监听器类 public void mousePressed(MouseEvent e) { if(e.getSource() == btn1) {//如果事件源始按钮1,则这些下面操作 System.out.println("btn1被按了一下"); } if(e.getSource() == btn2) {//如果事件源始按钮1,则这些下面操作 System.out.println("btn1被按了一下"); } }} 比如 如果在两个按钮btn1,btn2上添加了鼠标点击事件监听器MouseListener,即btn1.addMouseListener(new MouseMonitor()); btn2.addMouseListener(new MouseMonitor());这个监听器类写为class MouseMonitor extends MouseAdapter {//在按钮上的监听器类 public void mousePressed(MouseEvent e) { if(e.getSource() == btn1) {//如果事件源是按钮1,则执行下面操作 System.out.println("btn1被按了一下"); } if(e.getSource() == btn2) {//如果事件源是按钮2,则执行下面操作 System.out.println("btn1被按了一下"); } }}根据不同的事件源,执行不同的操作。从而产生不同的操作结果。 我想说的是 书上讲得是接口回调这一过程不可见 也就是细节问题没有讲出来 我想问的是 有谁知道 接口回调在内部是怎么实现的 比如说 public void addMouseListener(new MouseMonitor()) 函数的参数本来是接口类型 但是传了一个实现该接口的类的对象 那么在addMouseListener这个函数的函数体里面 有没有这样的类似语句 public void addMouseListener(Actionlistener x) { /*x是接口类型 x.mousePressed(MouseEvent e);}此时传了个实现接口类的对象 一旦有事情发生 接口调用函数mousePressed(MouseEvent e) 其实就是new MouseMonitor()这个对象调用函数 mousePressed(MouseEvent e) 所以在此体现了接口回调 不知道我这样的理解对不对。 这里有个观察者模式,当你addMouseListener时就将该MouseMonitor加入到了一个List中,当你触发了事件后,就会遍历List,调用MouseMonitor的mousePressed(MouseEvent e),也就是你定以的那方法了 interface SpeakHello { void speakHello();}class Chinese implements SpeakHello{ public void speakHello() { System.out.println("中国人习惯问候语:你好,吃饭了吗? "); }}class English implements SpeakHello{ public void speakHello() { System.out.println("英国人习惯问候语:你好,天气不错 "); }}class KindHello{ public void lookHello(SpeakHello hello) { hello.speakHello(); }}public class Example4_29{ public static void main(String args[]) { KindHello kindHello=new KindHello(); kindHello.lookHello(new Chinese()); kindHello.lookHello(new English()); }}这就是一个接口回调的例子,接口回调就是实现接口变量调用方法。我感觉你想理解的就是过程,在你的理解中加入 x=new MouseMonitor();这么一句就更清楚吧,总的来说就是把实现接口的对象的引用付给了变量。希望对你有用。 补充: hello.speakHello(); 就是接口回调,hello是接口变量,kindHello.lookHello(new Chinese());kindHello.lookHello(new English());这两句我觉得可以理解为接口存放对象的引用,hello=new Chinese();hello=new English(); hello.speakHello(); 就可以变为 new Chinese().speakHello(); new English().speakHello(); 你就是这样理解的吧,我觉得就是这样。因为我也不是很懂,所以你就适当理解吧。 JavaFileInputStream流Read的问题 怎么开发服务器间的讯息确认 java程序中注册系统级热键(高手请进)(附高分原帖地址) [求助]用过Netbeans的来看看 关于winxp下无法写入文档的问题 有个问题请教 javabean中的事件 我用Java写的一个多媒体播放工具 java实现三层架构的方法 如何输出中文? 用java正则匹配文件中的字符串的问题 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
监听button。当button被鼠标按了,
就调用监听button的方法public void actionPerformed(ActionEvent arg0),
接着执行里面的语句。(如果有多个组件需要通过ActionListener进行监听,那么只需要在方法:
public void actionPerformed(ActionEvent arg0){
if (arg0.getSource().equals(button1)){}
if (arg0.getSource().equals(button2)){}
}
其中,2个if就是用于判断用户点击的是哪一个按钮 ) 就像你去打电玩一样,按了哪一个键,就执行那个键相对应的方法。
btn1.addMouseListner(new MouseMonitor());
btn2.addMouseListener(new MouseMonitor());
这个监听器类写为
class MouseMonitor extends MouseAdapter {//在按钮上的监听器类
public void mousePressed(MouseEvent e) {
if(e.getSource() == btn1) {//如果事件源始按钮1,则这些下面操作
System.out.println("btn1被按了一下");
}
if(e.getSource() == btn2) {//如果事件源始按钮1,则这些下面操作
System.out.println("btn1被按了一下");
}
}
}
btn1.addMouseListener(new MouseMonitor());
btn2.addMouseListener(new MouseMonitor());
这个监听器类写为
class MouseMonitor extends MouseAdapter {//在按钮上的监听器类
public void mousePressed(MouseEvent e) {
if(e.getSource() == btn1) {//如果事件源是按钮1,则执行下面操作
System.out.println("btn1被按了一下");
}
if(e.getSource() == btn2) {//如果事件源是按钮2,则执行下面操作
System.out.println("btn1被按了一下");
}
}
}
根据不同的事件源,执行不同的操作。从而产生不同的操作结果。
比如说 public void addMouseListener(new MouseMonitor()) 函数的参数本来是接口类型
但是传了一个实现该接口的类的对象 那么在addMouseListener这个函数的函数体里面 有没有这样的类似语句
public void addMouseListener(Actionlistener x) { /*x是接口类型 x.mousePressed(MouseEvent e);
}
此时传了个实现接口类的对象 一旦有事情发生 接口调用函数mousePressed(MouseEvent e) 其实就是
new MouseMonitor()这个对象调用函数 mousePressed(MouseEvent e)
所以在此体现了接口回调 不知道我这样的理解对不对。
{ void speakHello();
}
class Chinese implements SpeakHello
{ public void speakHello()
{ System.out.println("中国人习惯问候语:你好,吃饭了吗? ");
}
}
class English implements SpeakHello
{ public void speakHello()
{ System.out.println("英国人习惯问候语:你好,天气不错 ");
}
}
class KindHello
{ public void lookHello(SpeakHello hello)
{ hello.speakHello();
}
}
public class Example4_29
{ public static void main(String args[])
{ KindHello kindHello=new KindHello();
kindHello.lookHello(new Chinese());
kindHello.lookHello(new English());
}
}这就是一个接口回调的例子,接口回调就是实现接口变量调用方法。我感觉你想理解的就是过程,在你的理解中加入 x=new MouseMonitor();这么一句就更清楚吧,总的来说就是把实现接口的对象的引用付给了变量。
希望对你有用。
hello.speakHello(); 就可以变为 new Chinese().speakHello(); new English().speakHello(); 你就是这样理解的吧,我觉得就是这样。
因为我也不是很懂,所以你就适当理解吧。