使用内部类实现回调过程的呈现如下代码。回调在java GUI的设计中处处皆是。
另外重复一条容易被忽视的设计规则,在子类继承父类,并对父类的方法进行重写时,不能降低父类方法的访问权限,可以扩大(当然,这样毫无意义),但是不能缩小,这是出于子类不能改变父类成员属性的考虑。例如,如果父类的方法访问权限是public,那么子类覆盖后的该方法访问权限就不能是protected或者private。
代码:
package test;
interface Increment{
void increment();
}
class MyIncrement{
public void increment(){
System.out.println("Other operation");
}
static void f(MyIncrement mi){
mi.increment();
}
}
class Caller extends MyIncrement{
private int i=0;
public void increment(){
super.increment();
i++;
System.out.println(i);
}
private class Closure implements Increment{
@Override
public void increment() {
// TODO Auto-generated method stub
Caller.this.increment();
}
}
Increment getCallbackReference(){
return new Closure();
}
}
class Caller2{
private Increment callbackReference;
Caller2(Increment callbackReference){
this.callbackReference=callbackReference;
}
void go(){
callbackReference.increment();
}
}
public class p206 {
public static void main(String args[]){
Caller callera=new Caller();
Caller2 callerb=new Caller2(callera.getCallbackReference());
callerb.go();
}
}
其中的Closure其实就是用来提供回调功能的内部类。相比于西加加用指针来实现回调来说,java这种方式更加的安全,不会因为指针的错误操作导致出错。可以看出,Closure是private的,只能通过getCallbackReference函数来获得,这样就比较安全。
分享到:
相关推荐
2020-4-6 java笔记 ---内部类 2020-4-6 java笔记 ---异常 2020-4-6 java笔记 --多线程 2020-4-8 java笔记 String类 2020-4-9 java 比较器 2020-4-10 java笔记 枚举类 2020-4-10 java 注解(Annotation) 2020-4-11 ...
读书笔记-Java并发编程实战-基础篇
JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1JAVA学习经典笔记-----1
Java笔记---李兴华---Java笔记---李兴华-----Java笔记---李兴华--Java笔记---李兴华
java编程思想笔记,建议与书本结合使用。。。。。。。。。。。
java核心编程笔记-持续更新
Java基础每日复习笔记-JavaSE高级阶段.2020-10-13-211312.edf
《java编程思想》学习笔记
---Java笔记---
Java是一种面相对象的编程语言。计算机语言分成两种,第一种是面向机器结构的语言,构建数据模型是基于机器的结构。第二种是面向待解决问题结构的语言,构建数据模型是基于问题的结构。Java提供了更丰富的工具来描述...
java笔记-------------java笔记-------------java笔记-------------
Java基础每日复习笔记-JavaSE基础阶段.edf
JAVA新手入门笔记-编程基础知识
java基础全套笔记--yyds
java编程思想读书笔记,114页,压缩文件才39K。
Java编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZFJava编程思想(第4版)读书笔记by CZF
Java编程思想重点笔记(Java开发必看)
自己收集的java编程笔记,关于集合类的知识,很有用