美文网首页
Java内部类详解

Java内部类详解

作者: 爱恨_交加 | 来源:发表于2020-09-27 16:21 被阅读0次

    内部类

    1. Inner类定义在Outer类的内部,相当于Outer类的一个成员变量的位置,Inner类可以使用任意访问控制符(public、protected、private等)
    2. Inner类中定义的方法可以直接访问访问Outer类中的数据,而不受访问控制符的影响,即使是Outer类的私有属性
    3. 定义了成员内部类后,必须使用外部类对象来创建内部类对象,而不能直接去new一个内部类对象(即 Outer. Inner 对象=new Outer().new Inner() )
    4. 编译上面的程序后,会产生两个.class文件:Outer. class、Outer$Inner.class
    5. 成员内部类中不能存在任何static的变量和方法,但可以定义常量:
        1、非静态内部类是要依赖于外部类的实例,而静态变量和方法是不依赖对象的,仅与类有关
        2、常量是在编译器就确定的,放到所谓的常量池了

    tip:

    1. 外部类不能直接使用内部类的成员和方法的,可先创建内部类的对象,然后通过内部类的对象来访问其成员变量和方法
    2. 如果外部类和内部类具有相同的成员变量或方法,内部类默认访问自己的成员变量或方法,如果访问外部类的成员变量可以使用this关键字,如:Outer.this.name

    静态内部类

    1. 静态内部类不能直接访问外部类的非静态成员,但可以通过“new 外部类().成员”的方式访问
    2. 如果外部类的静态成员与内部类的成员,名称相同,可通过“类名.静态成员”方式访问外部类的静态成员。如果不相同,则可以通过“成员名”直接调用外部类的静态成员
    3. 创建静态内部类的对象时,不需要外部类对象,可以直接创建(外部类.内部类 对象=new 外部类.内部类())

    方法内部类:

    其作用域仅限于方法内,方法外无法访问该内部类

    1. 局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的
    2. 只能访问方法中定义的final类型的局部变量,但jdk1.8之后可以不用final修饰

    匿名内部类

    1. 匿名内部类是直接使用new来生成一个对象的引用;
    2. 对于匿名内部类的使用,它是存在一个缺陷的,就是它仅能被使用一次,创建匿名内部类时它会立即创建一个该类的实例,该类的定义会立即消失,所以匿名内部类是不能够被重复使用
    3. 使用匿名内部类时,必须是继承一个类或者实现一个接口,其实也是只能继承一个类或者实现一个接口
    4. 匿名内部类中是不能定义构造函数的,匿名内部类中不能存在任何的静态成员变量和静态方法
    5. 匿名内部类不能是抽象的,它必须要实现继承的类或者实现的接口的所有抽象方法
    6. 匿名内部类初始化;使用构造代码块,利用构造代码块能够达到为匿名内部类创建一个构造器的效果

    相关文章

      网友评论

          本文标题:Java内部类详解

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