额,对于抽象类,接口 大家的第一印象就是它不能实例化,其实这是片面的,接口和抽象类之所以不能直接创建对象是因为其中有未实现的方法,如果在创建时将方法覆盖了 也可以了,我和大家的理解都不一样,我相信java之父也会在他接下来要发行的书里详细介绍匿名内部类,其实底层的不需要太多关心,只要我们有了一种理解,这种理解能引导正确的使用就可以了.举大家常用的线程的例子:
Runnable r = new Runable(){
@override
run(){
}
'};
在内存中就是r 指向了一个已经实现了的方法,而不是定义时的方法,这就是java多态的机制吧,这样的确,我们看到了实例化了一个接口,而且抽象类也能这样做,一般类也能,我称之为运行时改变类的结构,这个难道和动态代理不一样吗?,的确 有人非要认为是匿名内部类,可以这么理解 没错,但是我认为我的理解也不会错,这种写法只不过是java在运行时直接改变类的某些结构的机制罢了,怎么理解能正确的运行就可以了,我感觉这样理解简单多了 |