• 内部类的分类:成员内部类、局部内部类


    1、成员内部类

    修饰符 class Outer {
    
        修饰符 class INner {
            //
        }
    
    }
    

    注意:内部类使用外部类随意访问,外部类使用内部类要借助内部类对象

    使用成员内部类:
    a、间接方式:在外部类的方法中使用内部类,main只是调用外部类的方法
    b、直接方式:
    外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称()

    public class OuterClass {
    
        private String name = "outer";
        public void methodOuter() {
            int num = 10; // 局部变量
            System.out.println("Outer method");
            System.out.println();
            System.out.println(name);
    
            class Inner {
    
                private String name = "inner";// 内外重名
                public void methodInner() {
                    System.out.println("INNer method");
                    System.out.println(name);// 可以访问外部类的成员变量
    
                    System.out.println(this.name);// 访问内部类成员变量
                    System.out.println(OuterClass.this.name);// 访问外部类成员变量
                    //内部类如果要访问所在方法的局部变量,那么这个变量必须是final的,或者是事实上是[final]的,也就是不改变的
                    System.out.println(num);
                }
    
    
            }
        }
    }
    

    2、局部内部类:方法里的内部类

    上面的class Inner是在方法MethodOuter里的

    3、匿名内部类:局部内部类的一种

    如果接口的实现类(或者父类的子类)只需要使用一次,那么在这种情况下就可以省略该类的定义,而改为使用【匿名内部类】
    匿名内部类的格式:

    //接口本来不可以直接new,用于不必为了接口写一个接口的实现类
    接口名称 对象名 = new 接口名称 {
        这里是匿名内部类的内容
        在这里面覆盖重写所有的接口抽象方法
        @Override
        public void method1() {
            body
        }
    }
    

    注意事项:
    a、new 代表创建对象的动作
    b、接口名称就是匿名内部类要实现哪个接口
    c、匿名内部类在创建对象时只能唯一使用一次,如果希望多次创建对象,并且类的内容是一样的,最好还是写一个该接口的实现类
    d、匿名对象在调用方法的时候只能调用一次,如果希望调用多次方法,那就应该为匿名对象起个名字
    e、匿名内部类是省略了实现类(子类),匿名对象是省略了对象的名称

  • 相关阅读:
    ohmyzsh
    https://github.com/
    init 0,1,2,3,4,5,6
    关于反射
    docker学习笔记
    docker常见问题汇总
    ArrayList的sublist
    java-锁
    CAS-原子操作
    hashMap与concurrentHashMap
  • 原文地址:https://www.cnblogs.com/zhuobo/p/10612789.html
Copyright © 2020-2023  润新知