CoreJava 第6章 接口和内部类
1.克隆对象(深拷贝),复制对象,改原状态不会相互影响.
2.内部类:可访问外部类域,
3.代理(proxy) 实现任意接口的对象.
4.方法默认public,可定义常量(可认为没有实例域的抽象类)
实例类要声明public(默认包可见)
5.java是一种强类型的语言
6.实现Comparable接口可比较
要判断
if(getClass()!=o.getClass()){
throw new ClassCastException();
}
7.接口变量引用实现接口类对象
8.if(object instanceof Comparable) 判断实现接口
9.接口扩展 public interface Powered extends Moveable
10.double SPEED=55; ==( public static final) constrant(建议不书写多余关键字))
111.浅拷贝 除数字,基本类型外,其他引用
String类-不允许改变 --不同对象
Date可改变--有clone方法
数组.clone
11.Cloneable 只是作为标记(tagging interface),个人不建议这种写法
1)调用子对象的clone 可能修补深复制
2)Object有 protected Object clone()
子类调用重写 public Object clone();
j2se5 允许更改返回类型 public Employee clone();
3)深拷贝
public Employee clone() ..{
Employee o=(Employee)super.clone();
o.hireDated=(Date)hireDay.clone();
return o;
}
4)实现clone不会抛出异常,编译器不知道 要throws
是final类的话 可try..catch
12.子类只能扩展一个抽象类
13.序列化 安全,容易,低效
14.接口与回调callback
定时器调用对象方法
函数指针对应产物--method对象
public class TraceHandler implements InvocationHandler {private Object target;/** * */public TraceHandler(Object t) {target=t;}/* (non-Javadoc) * @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) */public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.print(target);System.out.print("."+method.getName()+"(");if(args!=null){for(int i=0;i<args.length;i++){System.out.print(args[i]);if(i<args.length-1)System.out.print(",");}System.out.println(")");}return method.invoke(target, args);//只是调用,并不覆盖}public static void main(String[] args) {Object[] elements=new Object[1000];for(int i=0;i<elements.length;i++){Integer value=i+1;InvocationHandler handler=new TraceHandler(value);//代理类Class[] interfaces=new Class[]{Comparable.class};//接口elements[i]=Proxy.newProxyInstance(null, interfaces, handler);//代理对象 }Integer key=new Random().nextInt(elements.length)+1;int result=Arrays.binarySearch(elements, key);if(result>=0)System.out.println(elements[result]);}}