zoukankan      html  css  js  c++  java
  • 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接口中只有两个方法。

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

    下图就是错误的。

  • 相关阅读:
    DNS 截持模拟及环境搭建
    Ant、Gradle、Python三种打包方式的介绍
    oc/c/c++混编老文,写的很好,mark
    好文!关于iOS下的正则表达式实战案例
    Java设计模式——享元模式
    Java 消息机制之回调详解
    windows版爬取csdn
    14.6.2 Configuring InnoDB for Read-Only Operation
    dump iot表
    heap表按字符串和数值型排序规则
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7841327.html
Copyright © 2011-2022 走看看