JAVA-初步认识-第十章-匿名内部类-细节

一.

谈论一个细节,

程序中有外部类和内部类,主函数和一般函数中都有一个新建内部类的对象。在编译运行的时候,出现了错误,如下所示。

为什么会有这样的错误出现?截图中说是69行出错了,我们现在将其注释掉,编译没有问题,为什么会这样?

为什么同样是new对象,主函数中的就不行呢?主函数是静态的,内部类是成员,是非静态的,主函数不能直接访问非静态的成员。如果非要访问,那就用static修饰。或者写成this.new Inner(); 外部类对象.new Inner(); 可是this没有,因为在静态中不允许有this。

为什么一般函数就可以创建内部类对象呢?因为里面持有this,(对于this理解还是不够深刻),

二.

截图中是创建了object类子类的对象,或者说内部类的对象。说白了,就是下面这样的

接下来完整地写出程序,编译没有问题。

(这个匿名的object子类,继承了object类的什么内容呢?说着说object有什么呢?)

如果内部类的方法不唯一,那就起名字

但是在编译,运行的时候出现了错误。

为什么这里不可以调用show()方法,因为父类或者接口object里面压根就没有show()方法,这个是内部类或者子类特有的方法。

多态中编译看左边,show()看左边的obj,obj是所属的object类型的接口,有show()方法么,没有,直接编译失败。object接口中只有两个方法。

为什么不做起名的这个动作就可以,而起名字的这种方式就不行?因为我在创建子类对象,调用子类对象就是没有问题。为什么起名字,建立引用就不行?因为子类对象向上转型了,一转型,就隐藏了它的子类型,并限定了特有方法使用。这就是多态,结合了匿名内部类了。

下图就是错误的。

 

posted @ 2017-11-15 23:00  前锋营  阅读(179)  评论(0编辑  收藏  举报