zoukankan      html  css  js  c++  java
  • JAVA-初步认识-第十章-匿名内部类-概述

    一.

    匿名内部类,内部类的匿名格式。之前学习过的匿名,是匿名对象。匿名对象是对象的简写格式。这里的匿名类也是如此。

    简写是为了方便,三元运算符也是如此。刚开始写匿名内部类有点变扭,写多了就习惯了。

    匿名内部类的简写有一个前提,不是所有内部类都能简写的。

    简写都要有前提。if esle变简写必须有运算结果。

    内部类匿名的前提表明,内部类必须和外面有关系,没关系不行。(这里有关系的外部类可以是内部类所属的外部类么?下面的例子中实现的是其他的类。应该不能是内部类所属的外部类,因为这样继承或者实现,就有一种循环嵌套的意思,自己又继承了外部类里面的内部类,这是我个人的理解。)

    先写一个常见的内部类,

    (这里内部类位于外部类的成员位置上,成员函数想要访问内部类的话,必须要创建类的对象,因为说是访问对象,实际上是调用类中的方法,如果不是调用类中的内容,那怎么算得上访问类呢?这里单纯的是这个成员函数想要访问类,)

    截图中是最为常见的内部类程序书写格式。在method()方法中,创建的内部类对象只调用了一次方法,那么按照之前匿名对象的规则。这里可以写成匿名对象的形式,这只是针对创建对象的匿名,而不是内部类的匿名。一个是创建对象的匿名,另一个是类的匿名,两者不一样。

    视频中介绍到这里说,匿名类就是说类没名字,如下,这样就糟糕了(一个类怎么能没名字呢?)

    内部类没有类名,那么new什么呢?这就是纠结的地方,(这怎么理解?什么叫匿名类就是没有类名?之前的匿名对象,也没有对象名,这里是说没有类名么?换种正确的写法就可以有类名了么?)

     要想实现内部类没有名字,成就匿名类,就必须按照前提来,

    正规地按照继承的说法,就应该如上图所示,只是这里的内部类类名是Outer$Inner而已,而且继承后,将Demo中的show()方法复写了,然后在接下里的成员函数中创建匿名对象,同时调用方法,这是没有问题的。

    现在内部类达到了匿名内部类的前提,如果把它换成没名字的话,该如何来写。

    在成员函数中写成new Inner就挂了,因为涉及到内部类的名字了

    按上图所写,才是没名字。inner没了,现在只能new它爹,如果连前提都没有,那我new谁呢?接下里new了一下Demo,出事没?

    出事了,Demo是抽象的,不写抽象的就没问题了?还是没抓住核心。这里有两部分,一个是new的部分,一个是调用的部分。如果把抽象对象复写了,那就可以创建对象了。方法是不是要封装起来?是的,下图不能写分号,写分号是创建对象。

    后面直接写大括号,这叫new了一个Demo类的子类对象,因为只有子类才有权利覆盖show方法,我把覆盖的方法,定义在这个区间当中。带着内容的对象,

    这个就是匿名内部类。(对这里匿名内部类的认识:一是内部类确实没了名字,二是内部类的位置在局部位置上,而不是成员位置上)

    其实说白了,就是new个对象,对象还带着内容,能带内容的对象是Demo的子类,因为只有子类才能覆盖方法,

    按照上图的说法,它还是一个类么,它不是子类的对象么?

    匿名不匿名,不管,其实就是子类对象,它就是做了一个简化封装动作。按理说,咱要搞一个类去继承它爹,覆盖它的方法,接着再成员函数中new对象,调用方法。现在是一气呵成,连复写和new对象一起搞定,

    具体匿名内部类的格式如下

    还可以对匿名内部类进行程序的扩展,里面添加了一个haha方法,子类对象中除了继承来的方法,还有自己特有的方法,这是没有问题的。

    这些所讲的是一种简写格式,看着有些变扭,但是实际上还是下图的体现,

     

     再回过头来看,匿名内部类格式写完后,我们实现了子类继承时方法的复写,new对象,还差一个调用方法,接下来就补充调用。

     

    下面就是说怎么在主函数中实现了这样的程序了。为什么这里会有这样的疑惑?还是对内部类的使用不熟悉

    下面截图中蓝底覆盖的部分就是匿名内部类,

    要始终牢记,这是内部类的简写格式,省去了类名,所以叫做匿名内部类。它一样是由弊端的。

    说实话,但看这形式,确实是分布在类里面的一个子类对象的简写,将位于里面的子类进行了简化。

  • 相关阅读:
    wordpress自定义文章类型public参数说明
    wordpress自定义文章类型描述信息description的使用
    wordpress进阶教程(二):注册一个自定义的文章类型
    wordpress进阶教程(一):wordpress文章类型
    wodpress进阶教程:前言
    Lucene全文检索基础
    MongoDB实用教程
    1小时学会JQuery
    Ajax+Struts2实现验证码验证功能
    AJAX编程实践
  • 原文地址:https://www.cnblogs.com/wsw-bk/p/7841081.html
Copyright © 2011-2022 走看看