Java基础笔记之内部类

内部类

简单说明

 内部类只能被相应的外部类使用,不允许同一个包中的其他类直接访问。

 内部类可以访问外部类的成员,因为内部类被当作外部类的成员,类成员之间可以相互访问,但是外部内不能直接访问内部类的成员,包括Field和Method。


非静态内部类

每个内部类对象都引用一个外部类的this变量,假如内部类的某个方法中想访问外部类的一个Field,同时它自己的成员Field中也有一个同样的Field,那么:

通过this.变量名来访问自己的成员Field;

通过外部类名.this.变量名来访问外部类的Field。


静态内部类

用static修饰的内部类,该内部类属于外部类本身,而不属于外部类的某个对象,根据静态成员不能访问非静态成员的规则,静态内部类只能访问外部类的类成员,不能访问外部类的实例成员。因此可以通过外部类名.变量名访问外部类的类成员。


在外部使用内部类

用private修饰的内部类在外部类的内部使用;

用protected修饰的内部类可以在外部类内部被子类继承,在外部类外部跟private修饰的一样。

不加修饰符的内部类只能在外部类所在的包内部使用;

用public修饰的内部类能在任何地方使用,当然也要依赖外部类的访问权限。


实例化非静态内部类的形式:OuterClass.InterClass varName = new OuterClass().new InterClass();

或者:    OuterClass outClassObject = new OutClass();

OuterClass.InterClass varName = outClassObject.new InterClass();


实例化静态内部类的形式:OuterClass.InterClass varName = new OuterClass.InterClass();


区别:创建内部类对象时,静态内部类只需使用外部类即可调用构造器,而非静态内部类必须调用外部类的对象来调用构造器。


局部内部类:局部内部类和局部变量都是只是在定义其的方法类有效,因此添不添加访问控制符没什么关系,但是java规定所有的局部成员不能使用访问控制符修饰。


匿名内部类:只能使用一次的类

固定格式: new 父类构造器(形参列表) | 实现接口()

                     {

                                   //匿名内部类的类体部分

                     }

规定:

1. 匿名内部类必须也只只能继承一个父类或实现一个接口,而且匿名内部类不能是抽象类,因为系统在创建匿名内部类时,会立即创建匿名内部类的对象。

2. 匿名内部类不能定义构造器,因为没有类名,可以通过初始化块完成构造器的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值