java 内部类

想要区分出内部类,那首先就需要知道什么是外部类。只有直接归属于文件第一级的类才能算作是外部类,而其他的都可以归属于内部类。注意,这里的类可以是普通类,接口、抽象类或者枚举类。

内部类又可以分为四种:非静态内部类静态内部类局部内部类匿名内部类

其中的非静态内部类和静态内部类可以看作是成员变量,所以就可以使用四种权限访问修饰符了,不像外部类,只能够使用public和friendly(默认)。

而局部内部类和匿名内部类只能看作是局部变量,所以是不可以使用权限访问修饰符的。

public class OuterClass { // 外部类。
    public class InnerClass { // 非静态内部类,可以使用权限访问修饰符,因为被看作是成员变量。
        // 1.可以访问外部类的任意成员变量和成员函数,不用管访问权限修饰符。
        // 2.但是自己创建成员变量的时候,不可以创建带有static的成员变量。
    }
    
    static class InnerStaticClass { // 静态内部类,可以使用权限访问修饰符,因为被看作是成员变量。
        // 1.在静态内部类中只能访问外部类中静态的成员函数和成员变量。
    }
    
    public void function() {
        class InnerClass2 { // 局部内部类,并且不可以使用权限访问修饰符,因为被看作是局部变量。
            // 1.可以访问外部类的所有成员变量和成员方法。
        }
        
        InnerClass3 ic = new InnerClass3() { // 匿名内部类,并不需要创建实际类,而是直接利用已有的类、接口、抽象类等创建对象,之后重写目标函数,这样就能得到特定的目标类对象。
            @Override
            public void override_function() {
                
            }
        };
    }
}

局部内部类和匿名内部类的区别在于,局部内部类相当于在函数等局部位置直接创建了一个类,但是作用域只在代码块中。匿名内部类是不需要创建类的,但是可以直接获取目标类的对象,并且可以定制化目标函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值