zoukankan      html  css  js  c++  java
  • java学习笔记day06---匿名内部类

    1.匿名内部类:其实就是内部类的简化形式,它所体现的就是一个类或者接口的子类对象。
    前提:
         内部类必须继承或实现外部类或接口。

    格式:
        new 父类&接口(){};
        其实就是一个子类对象,用{};结束

     匿名内部类在程序中的体现形式有三种:
     1.父类为普通的类

    class Inter{
    
    }
    
    class OuterTest{
    
        public static void function(){
    
            new Inter(){
    
                private int num = 9;
                void show(){
                    System.out.println("这是Inter子类的成员变量num="+num);
                }
            }.show();
            /*
            若改以上代码为:编译时就会报错了,因为编译时检查左边类型Inter类中并没有show()方法
            Inter in = new Inter(){};
            in.show();
            */
        }
    }
    
    class  MyOuterDemo
    {
        public static void main(String[] args) 
        {
            OuterTest.function();
        }
    }

    2.父类为抽象类(子类中一定要覆盖抽象方法)

     2.父类为抽象类(子类中一定要覆盖抽象方法)
    abstract class Test{
    
        abstract void show();
    }
    
    class Outer{
        int x = 8;
    
        /* 这是匿名内部类的完整形式
        class Inter extends Test{
    
            void show(){
                System.out.println(x);
            }
        }
        */
    
        public void method(){
    
            //new Inter().show();
    
            Test t = new Test(){
    
                void show(){
                    System.out.println("x="+x);
                    System.out.println("这是覆盖Test抽象类中的方法,因为子类继承它就必须覆盖");
                }
    
                void show1(){
                    System.out.println("这是Test子类自己的方法");
                }
    
            };
            t.show();
            //t.show1();运行这个里会报错,因为Test抽象类中并没有show1()方法
            
        }
    }
    
    class OuterInterDemo 
    {
        public static void main(String[] args) 
        {
            new Outer().method();
    
        }
    }

     3.父类为接口interface

    interface Inter{
        void show();
    }
    
    class Outer{
    
        static Inter method(){
    
            return new Inter(){
    
                public void show(){
                    System.out.println("show run");
                }
            };
    
        }
    }
    
    
    class OuterTest1 
    {
        public static void main(String[] args) 
        {
            Outer.method().show();
            /*
            上面一句,相当于:
            Inter in = Outer。method();
            in.show();
            */
        }
    }

    什么时候使用匿名内部类?
       当函数的参数是一个接口类型时,该接口中的方法不超过3个的时候(因为方法过多时,产生匿名内部类的方法就变得太臃肿了),为了简化代码,将匿名内部类作为参数进行传递。

  • 相关阅读:
    开源 免费 java CMS
    运行shell脚本报错 '357273277': command not found 解决的方法
    Android学习笔记之Spinner下拉列表使用案例
    HDU 1542 Atlantis (线段树 + 扫描线 + 离散化)
    DrawerLayout
    云计算设计模式(十三)——领导人选举模式
    算法之贪心思想
    [Android]Volley源代码分析(叁)Network
    oracle TABLE ACCESS BY INDEX ROWID 你不知道的索引回表-开发系列(三)
    JavaScript No Overloading 函数无重载之说
  • 原文地址:https://www.cnblogs.com/luihengk/p/4052466.html
Copyright © 2011-2022 走看看