Java核心技术——接口和内部类

一、接口
1.接口不是类,是对类的一组需求描述
2.接口可以定义常量(自动设置为public static final),不能含有实例域,也不能在接口中实现方法,因此可以将其看成没有实例域的抽象类
3.使用sort方法对数组中的元素进行排序时要求数组中的元素是实现了Comparable接口的类,且元素间是可比较的
4.接口不能用new实例化,但可以声明接口的变量,接口变量必须引用实现了接口的类对象
5.实现ActionListener接口的类,当到达指定的时间间隔,定时器就调用actionPerformed方法


二、对象克隆
1.默认的克隆操作是浅拷贝,没有克隆包含在对象中的内部对象
2.对象克隆需要对类实现Cloneable接口,并重新定义clone方法
3.即使clone的默认实现(浅拷贝)能够满足要求,也应该实现Cloneable接口,将clone重定义为public,并调用super.clone()
4.所有数组类型均包含一个clone方法,可以直接调用 变量名.clone() 进行深拷贝


三、内部类
1.只有内部类可以是私有的,这样一来,只有外部类的方法才能够生成此内部类的对象
2.内部类既可以访问自身的数据域,也可以访问创建它的外围类对象的数据域
3.在外部类之外使用内部类的语法是 OuterClass.InnerClass ,前提是要同时具有这个内部类和其所在的外部类的访问权限
4.局部内部类在一个方法中定义,不能用public或private进行声明,作用域被限定在这个方法中,除了这个方法,没有任何方法知道此类的存在
5.局部类还可以引用定义为final的局部变量(方法中的参数变量)
6.匿名内部类是局部内部类的深入,即在只创建这个类的一个对象情况下,无需对其命名
7.当内部类不需要引用外围类对象时,可以将内部类声明为static,以便取消产生的引用


四、代理
1.代理类的核心意义在于提供一种代理访问模式,即不直接访问最终要访问的类,而是通过一个中间代理类来间接访问最终要访问的类。其作用是可以在代理类的层面中加入一些附加的处理,而不用修改最终要访问的类
2.使用代理类的主要过程:
  1)通过Proxy.newProxyInstance方法生成代理类
  2)客户代码使用给定的接口访问生成的代理类
  3)所生成的代理类借助InvocationHandler来实现对最终类的调用,调用中可以加入一些附加的处理
  4)在后端最终类中完成最终的处理逻辑
3.代理类的例子
  1)访问接口代码
public interface TheInterface {
    public int op();
}
  2)最终类的代码
public class BusinessClass implements TheInterface {
    public int op() {
        System.out.println("实际业务处理逻辑。");
        return 1 + 1;
    }
}
  3)InvocationHandler实现类的代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class InvocationHandlerClass implements InvocationHandler {
    private Object object = new BusinessClass();
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("在Handler中进行一些附加处理。")
        Object ret = method.invoke(this.object, args);
        return ret;
    }
}
  4)客户代码
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class ProxyClientClass {
    public static void main(String[] args) {
        InvocationHandler handler = new InvocationHandlerClass();
        Class[] interfaces = {TheInterface.class};
        TheInterface proxyObj = (TheInterface) Proxy.newProxyInstance(
            InvocationHandlerClass.class.getClassLoader(),
            interfaces,
            handler);
        proxyObj.op();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值