Core Java笔记—第6章 接口与内部类
来源:互联网 发布:开淘宝需要多少资金 编辑:程序博客网 时间:2024/04/30 08:06
6.1 接口
在Java程序设计语言中,接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的统一格式进行定义.
接口中的所有方法自动设为public,因此在接口中声明方法时,不必提供关键字public.但是方法不能是static的.
接口中的变量域自动设为public static final.
在JDK 5.0中,Comparable接口已经改进为泛型类型.
public interface Comparable<T>
{
int compareTo(T other);
}
接口不是类,不能使用new运算符实例化一个接口,但能声明接口变量,其必须引用实现了接口的类对象.
与使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instanceof检查一个对象是否实现了某个特定的接口:if(anObject instanceof Comparable){...}.
Java中每个类只能够拥有一个超类,但可以实现多个接口.
6.2 对象克隆
Object类的clone方法是一个protected方法.由于这个类对具体的类一无所知,所以只能将各个域进行对应的拷贝,即默认的clone操作是浅拷贝.
即使clone的默认实现(浅拷贝)能够满足需求,也应该实现Clonebale接口,将clone定义为public,应调用super.clone().
只要在clone中含有没有实现Clonebale接口的对象,Object类的clone方法就会抛出一个CloneNotSupportedException异常.
所有的数组类型均包含一个clone方法,设个方法被设为public,而不是protected,可以利用这个方法创建一个包含所有数据元素拷贝的一个新数组.
6.3 接口与回调
Java有函数指针的对应物—Method对象,然而使用起来比较困难,速度也稍慢,且在编译时不能提供类型的安全性检查,因此在任何使用C++函数指针的地方,都应该考虑使用Java中的接口.
6.4 内部类
内部类是定义在另一个类中的类,使用内部类的原因:
1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据.
2.内部类可以对同一个包中的其他类隐藏起来.
3.当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷.
只有内部类可以是私有类,而常规类只能具有包的可见性或共有的可见性.
内部类既可以访问自身的数据域,也可以访问创建它的外围类的数据域.
OuterClass.this表示外围类引用.
内部类是一种编译器现象,与虚拟机无关.编译器将会把内部类翻译成$分隔外部类名与内部类名的常规类文件,而虚拟机对此一无所知.
在方法中定义的类叫做局部内部类,局部类不能用public或private修饰符进行声明,它的作用域被限定在声明该局部类的块中.局部类不仅能访问它们的外围类域,还能访问局部变量.不过,这些局部变量必须被声明为final.
将局部内部类的使用再深入一点,假如只创建这个类的一个对象就不必给它命名了,这种类被称为匿名内部类.
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器.
只有内部类可以声明为static.静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样.
6.5 代理
代理(proxy),是JDK 1.3新增加的特性.利用代理可以在运行时创建一个实现一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用.
//以下内容并不来自Core Java
关于Java动态代理的参考资料:
java动态代理学习笔记:http://langyu.iteye.com/blog/410071
Java 动态代理机制分析及扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
使用动态代理的一般步骤
1.声明接口
2.定义实现接口的真正的实现类
3.定义调用处理器类实现InvocationHandler接口,即给出invoke方法的实现
4.使用Proxy.newProxyInstance创建动态代理对象
动态生成的代理类都是继承于Proxy类,类名按格式“$ProxyN”生成,其中 N 是逐一递增的数字.这个动态代理类的代码是在运行时由Proxy类动态构造生成,即代码是由机器产生的,然后被加载到虚拟机,同时创建该类的对象.
JDK的动态代理只能支持接口的代理,而不能实现对类的代理,原因在于动态生成的代理类本身是继承至Proxy类,由于Java不支持多继承导致其不能再继承需要代理的类,因而无法实现对类的代理.
在Java程序设计语言中,接口不是类,而是一组对类的需求描述,这些类要遵从接口描述的统一格式进行定义.
接口中的所有方法自动设为public,因此在接口中声明方法时,不必提供关键字public.但是方法不能是static的.
接口中的变量域自动设为public static final.
在JDK 5.0中,Comparable接口已经改进为泛型类型.
public interface Comparable<T>
{
int compareTo(T other);
}
接口不是类,不能使用new运算符实例化一个接口,但能声明接口变量,其必须引用实现了接口的类对象.
与使用instanceof检查一个对象是否属于某个特定类一样,也可以使用instanceof检查一个对象是否实现了某个特定的接口:if(anObject instanceof Comparable){...}.
Java中每个类只能够拥有一个超类,但可以实现多个接口.
6.2 对象克隆
Object类的clone方法是一个protected方法.由于这个类对具体的类一无所知,所以只能将各个域进行对应的拷贝,即默认的clone操作是浅拷贝.
即使clone的默认实现(浅拷贝)能够满足需求,也应该实现Clonebale接口,将clone定义为public,应调用super.clone().
只要在clone中含有没有实现Clonebale接口的对象,Object类的clone方法就会抛出一个CloneNotSupportedException异常.
所有的数组类型均包含一个clone方法,设个方法被设为public,而不是protected,可以利用这个方法创建一个包含所有数据元素拷贝的一个新数组.
6.3 接口与回调
Java有函数指针的对应物—Method对象,然而使用起来比较困难,速度也稍慢,且在编译时不能提供类型的安全性检查,因此在任何使用C++函数指针的地方,都应该考虑使用Java中的接口.
6.4 内部类
内部类是定义在另一个类中的类,使用内部类的原因:
1.内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据.
2.内部类可以对同一个包中的其他类隐藏起来.
3.当想要定义一个回调函数且不想编写大量代码时,使用匿名内部类比较便捷.
只有内部类可以是私有类,而常规类只能具有包的可见性或共有的可见性.
内部类既可以访问自身的数据域,也可以访问创建它的外围类的数据域.
OuterClass.this表示外围类引用.
内部类是一种编译器现象,与虚拟机无关.编译器将会把内部类翻译成$分隔外部类名与内部类名的常规类文件,而虚拟机对此一无所知.
在方法中定义的类叫做局部内部类,局部类不能用public或private修饰符进行声明,它的作用域被限定在声明该局部类的块中.局部类不仅能访问它们的外围类域,还能访问局部变量.不过,这些局部变量必须被声明为final.
将局部内部类的使用再深入一点,假如只创建这个类的一个对象就不必给它命名了,这种类被称为匿名内部类.
由于构造器的名字必须与类名相同,而匿名类没有类名,所以匿名类不能有构造器.
只有内部类可以声明为static.静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样.
6.5 代理
代理(proxy),是JDK 1.3新增加的特性.利用代理可以在运行时创建一个实现一组给定接口的新类.这种功能只有在编译时无法确定需要实现哪个接口时才有必要使用.
//以下内容并不来自Core Java
关于Java动态代理的参考资料:
java动态代理学习笔记:http://langyu.iteye.com/blog/410071
Java 动态代理机制分析及扩展:http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/
使用动态代理的一般步骤
1.声明接口
2.定义实现接口的真正的实现类
3.定义调用处理器类实现InvocationHandler接口,即给出invoke方法的实现
4.使用Proxy.newProxyInstance创建动态代理对象
动态生成的代理类都是继承于Proxy类,类名按格式“$ProxyN”生成,其中 N 是逐一递增的数字.这个动态代理类的代码是在运行时由Proxy类动态构造生成,即代码是由机器产生的,然后被加载到虚拟机,同时创建该类的对象.
JDK的动态代理只能支持接口的代理,而不能实现对类的代理,原因在于动态生成的代理类本身是继承至Proxy类,由于Java不支持多继承导致其不能再继承需要代理的类,因而无法实现对类的代理.
0 0
- Core Java笔记—第6章 接口与内部类
- [core java学习笔记][第六章接口与内部类]
- 第6章 接口与内部类
- 第6章 接口与内部类
- Java核心技术 卷I —— 第6章 接口与内部类
- JAVA学习笔记----接口与内部类
- 笔记:Java 接口与内部类
- java核心技术笔记 接口与内部类
- java学习笔记-接口与内部类
- 【java核心技术笔记】接口与内部类
- 第8章:接口与内部类
- 第8章 接口与内部类
- java学习笔记---第六章接口与内部类
- 《Java核心技术》复习笔记 - 第六章 接口与内部类
- 【黑马程序员】 java笔记——接口与内部类
- Java学习笔记四——接口与内部类
- 【笔记】Java编程思想—一接口与内部类
- 2015 7 1 java核心技术 卷1 第6章 接口与内部类
- SSH的一些简单理解
- 项目开发经验分享—分页查询
- Android之launcher学习(四)
- 【运筹学】第一遍宏观总结
- Java语言程序设计-基础篇-4.19编程-金字塔
- Core Java笔记—第6章 接口与内部类
- Perl Tk设置标签字体
- Linux内核分析(三)
- Candy
- github开源Android组件资源整理(六)GraphView, UI Style
- java语言的设计目标
- 如何进行单元测试
- Enum的用法
- Github开源Android组件资源整理(七)其他组件