总是搞不清内部类

作者: 风吹稻子 | 来源:发表于2017-05-10 08:48 被阅读63次

    内部类不多,就三种,但是知识点特别碎,总是把我搞迷糊。但我发现它和变量有些相似。哎!管它是什么?先写下来吧,好记性不如烂笔头么!

    局部内部类

    1. 是指内部类定义在方法和作用域内
    2. 其作用域只在方法体内部
    3. 局部内部类的成员的方法的参数和局部变量必须是final定义的
    4. 不能使用private,protected,public 等访问修饰符

    代码示例:

    package innerclass;
    /**
     * 局部内部类,是指内部类定义在方法和作用域内
     * 其作用域只在方法体内部
     * 成员的方法的参数和局部变量必须是final定义的
     * 不能使用private,protected,public 等访问修饰符
     * @author Administrator
     *
     */
    public class JuBuClass {
        private String name="关头请";
        //成员的方法的参数和局部变量必须是final定义的
        public ShowCla showName(final int b){
            final int a = 10;
            //其作用域只在方法体内部
            //不能使用private,protected,public 等访问修饰符
            class Clazz extends ShowCla{
                private int num = 400;
            
                public void show(){
                    System.out.print("jkdf"+b);
                }
            }
        
            //new Clazz().show();
            return new Clazz();
        }
    
        public static void main(String[] args){
            JuBuClass jubu = new JuBuClass();
            jubu.showName(10).show();
        }
    
    }
    
    abstract class ShowCla{
        public abstract void show();
    }
    

    测试结果:

    jkdf10
    

    成员内部类

    1. 如果外部类属性名和内部类属性名,我们用外部类.this来调用外部类的属性名
    2. 内部类的优点:可以不用创建对象去调用外部类的属性和方法
    3. 内部类的创建方式: 外部类.内部类 对象名 = new 外部类().new 内部类()

    代码示例:

    package innerclass;
    
    public class School {
        private String name="河南";
        private int size = 100;
        
        public void outShow(){
            Clazz c = new Clazz();
            c.show();
        }
        
        public class Clazz{
            private int n=400;
            
            public void show(){
                size = 10;
                System.out.println("内部show方法"+size);
                
            }
        }
    
        public static void main(String[] args){
            School s = new School();
            Clazz c = s.new Clazz();
            s.outShow();
        }
    }
    

    测试结果:

    内部show方法10
    

    匿名内部类

    1. 由于匿名内部类没有名称,所以不能写构造方法

    2. 匿名内部类格式new 匿名类{方法体};

    3. 匿名内部类可以继承和实现一个接口

      代码示例:

       package innerclass;
       
       /**
        * 由于匿名内部类没有名称,所以不能写构造方法
        * 匿名内部类格式new 匿名类{方法体}
        * 匿名内部类可以继承和实现一个借口
        * @author Administrator
        *
        */
       public class WuMing {
           private String name = "光头请";
           
           public ShowCla cla(final int num){
               return new ShowCla(){
                   private int size;
                   public void show(){
                       System.out.println(size+" "+num);
                   }
               };
           }
           
           public static void main(String[] args){
               WuMing wu = new WuMing();
               wu.cla(10).show();
           }
       }
      

    测试结果:

    0 10
    

    递归:

    1.有反复执行的过程(调用自身)
    2.有反复执行过程的条件(递归出口)
    //递归跟循环或者算法,运行效率低

    相关文章

      网友评论

        本文标题:总是搞不清内部类

        本文链接:https://www.haomeiwen.com/subject/vcywtxtx.html