A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

匿名(无名)内部类:
1.匿名内部类其实就是内部类的简写格式
2.匿名内部类前提:
  内部类必须继承一个类或实现接口
3.匿名内部类格式:
  new 父类或者接口(){定义子类的内容}

4.其实匿名内部类就是一个匿名子类对象
  (带内容的对象)

5.匿名内部类中定义的方法最好<3个(超出3个代码将变得冗长)
  1. abstract class AbsDemo//抽象类
  2. {
  3.   abstract void show();
  4. }

  5. class Outer
  6. {
  7.     int x=5;
  8. /*

  9.   class Inner extends AbsDemo
  10.   {
  11.     void show()
  12.     {
  13.      System.out.println("show:"+x);
  14.    
  15.     }
  16.   
  17.   }
  18.   */

  19.   public void function()
  20.     {
  21.       //② new Inner().show();
  22.       //把① ②注释简写为:
  23.      
  24.       new AbsDemo()//匿名对象
  25.       {
  26.         void show()
  27.        {
  28.          System.out.println("x="+x);

  29.        }
  30.       
  31.       }.show();
  32.       //以上是一个对象,是AbsDemo子类的对象
  33.       
  34.       //通过匿名对象调用子类特有方法
  35.        new AbsDemo()
  36.       {
  37.         void show()
  38.        {
  39.          System.out.println("x="+x);

  40.        }
  41.      
  42.        void son()//子类特有方法
  43.        {
  44.         System.out.println("son");
  45.        }
  46.               }.son();
  47.      
  48.       //通过父类的引用来调用
  49.      AbsDemo ab= new AbsDemo()//多态 父类引用指向子类对象
  50.      {
  51.         void show()
  52.        {
  53.          System.out.println("x="+x);

  54.         }
  55.         void son()
  56.         {
  57.          System.out.println("son");
  58.         }
  59.      };
  60.      ab.show();
  61.      //ab.son();//编译失败,父类中无son()
  62.                 //并且无法通过向下转型来调用son();
  63.     }           //因为子类没名字!
  64. }
  65. class AnonyInnerDemo
  66. {
  67.   public static void main(String[] args)
  68.   {
  69.    new Outer().function();
  70.   }

  71. }
复制代码

输出 :
x = 5
son
x = 5

2 个回复

倒序浏览
有问题请大家指出
回复 使用道具 举报
我来学习学习
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马