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不支持多继承导致其不能再继承需要代理的类,因而无法实现对类的代理.
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝删除差评后店家不返现怎么办 天猫店家迟迟不发货怎么办 淘宝下单后店家说缺货怎么办 用淘宝把话费冲到空号上怎么办 d速快递没有网点怎么办 京东买的货没收到怎么办 淘宝物流显示已揽件就是不动怎么办 淘宝查不到物流信息怎么办 快递物流信息更新错怎么办 淘宝上查不到物流怎么办 微信买的东西不给退怎么办 微信购物已收货怎么办 微信买东西不退怎么办 银行经营贷款资金回流怎么办 淘宝有运费险换货怎么办 淘宝有运费险的换货怎么办 淘宝换货一直不发货怎么办 淘宝申请换货卖家不发货怎么办 淘宝买家泄露卖家信息怎么办 高仿苹果没内存怎么办 高仿苹果7太卡怎么办 天猫客服处理不了怎么办 美团顾客电话打不通怎么办 美团众包顾客电话打不通怎么办 天猫退货商家拒绝退款怎么办 中关村买电脑被骗了怎么办 在闲鱼被买家骗了东西怎么办 在手机店买手机被骗怎么办 买手机分期付款被骗了怎么办 买电脑被骗了怎么办啊 小米卡puk锁了怎么办 红米3x电池松动怎么办 实体店买到苹果翻新机怎么办 小米手环2米粒掉怎么办 小米字体下架了怎么办 京东白条被锁定怎么办 苹果6splus很卡怎么办 苹果6s卡槽坏了怎么办 在京东买的电脑没发票怎么办 京东上买的空调没发票怎么办 分期手机被坑了怎么办