zoukankan      html  css  js  c++  java
  • Java匿名内部类相关

    匿名内部类的前提:内部类可以处于成员位置上。

     1 class Outer
     2 {
     3     int x=3;
     4     void method()
     5     {
     6         class Inner
     7         {
     8             void function()
     9             {
    10                 System.out.print(Outer.this.x);
    11             }
    12         }
    13     }
    14 }
    15  

    匿名内部类只是一种简写格式:

        1.匿名内部类其实就是内部类的简写格式。

        2.定义匿名内部类的前提:

            内部类必须是继承一个类或者实现接口。

        3.匿名内部类的格式:

    1 new 父类或者子类接口()
    2 {
    3      定义子类内容;
    4 }    

        4.其实匿名内部类就是一个匿名子类对象,而且这个对象有点胖。可以理解为带内容的对象。

     1 class Outer
     2 {
     3     int x = 3;
     4 
     5     class Inner extends AbsDemo//正常写法,若是想匿名写就必须继承或者实现一个接口
     6     {
     7         void show()
     8         {
     9             System.out.print("show:" + x);
    10         }
    11     }
    12 
    13     public void function()
    14     {
    15         new Inner().show();
    16     }
    17 }
    18 abstract class AbsDemo
    19 {
    20     abstract void show();
    21 }
    22 
    23 class Outer
    24 {
    25     int x = 3;
    26 
    27     public void function()
    28     {
    29         /*
    30          * 与new Inner().show(); 相比,下面的相当于把Inner替换了, 
    31                  * 但是没有Inner类,所以调用其父类,父类中含有抽象方法,
    32          * 所以要先去实现。建立对象之后,调用对象的的方法.show() 也就理所当然了。
    33          */
    34         new AbsDemo() // 匿名内部类
    35         {
    36             @Override
    37             void show()
    38             {
    39                 System.out.print("x==" + x);
    40             }
    41         }.show();
    42     }
    43 }

    5.如果你匿名内部类里面覆盖和(或)定义了两个以上的方法,就不能用匿名的方式了,因为匿名的只能调用一次。所以要是想用两个方法,就得起个名儿。

    1 AbsDemo a = new AbsDemo() // 匿名内部类
    2 {
    3     @Override
    4     void show()
    5     {
    6         System.out.print("x==" + x);
    7     }
    8 };

    注意,AbsDemo是父类,建立的a是子类对象,这不就是多态嘛。

    但是在调用的时候

    1 a.show();//这个问题不大
    2 a.abc();//这个就编译不过去了,父类根本就没有abc方法。
  • 相关阅读:
    make编译四
    【原创】大叔经验分享(73)scala akka actor
    【原创】大数据基础之Logstash(6)mongo input
    【原创】数据库基础之Sqlite
    【原创】大叔经验分享(72)mysql时区
    【原创】大数据基础之Chronos
    【原创】Linux基础之logrotate
    【原创】大数据基础之Drill(1)简介、安装及使用
    【原创】Java基础之Nginx缓存
    【原创】运维基础之Amplify
  • 原文地址:https://www.cnblogs.com/KangYh/p/9790949.html
Copyright © 2011-2022 走看看