Java面向对象:内部类

内部类

内部类是指在一个类的内部定义的类,名称不需要和文件名相同。(顶级的外部类不但要求类名和文件名相同,而且只能使用public和default。)

内部类是一个编译时的概念,一旦编译成功会有和外部类完全不同的两个类。(编译成功会出现两个class文件,外部类.class和外部类&内部类.class)

内部类和外部类没有继承关系。

内部类分类

非静态成员内部类

非静态内部类不能调用静态的属性和方法,非静态内部类不能包含静态的属性和方法。

内部类调用外部类的属性和方法

不重名:直接使用

重名:外部类.this.属性/方法

外部类调内部类的属性和方法

创建内部类对象:外部类.内部类 对象名 = new 外部类().new 内部类();

别的类来调用内部类的属性和方法

创建内部类对象:外部类.内部类 对象名 = new 外部类().new 内部类();

就近访问原则

 

静态成员内部类

最外部类不能为静态。

内部类调用外部类的属性和方法

只能调用static修饰的属性和方法

外部类调用内部类的属性和方法

创建内部类对象,在内部类下面,无需再创建外部类实例:外部类.内部类 对象名 = new 外部类.内部类();

别的类调用内部类的属性和方法

创建内部类对象:外部类.内部类 对象名 = new 外部类.内部类();

局部内部类

不可以加访问修饰符,不可以加静态修饰符,作用域仅限于局部内部类所在的方法,不能在方法以外使用。

局部内部类调用外部的属性和方法

直接使用

局部内部类所在的方法调用局部内部类的属性和方法

创建局部内部类的对象

局部内部类调用内部类所在的方法的局部变量

需要给所在方法的局部变量加final修饰

局部变量是随着方法的调用而调用,随着调用完毕而消失。而堆内存中的内容并不会立即消失,所以加final修饰,变量变成常量,即使变量随着方法调用完毕消失,变量的数据还存储在内存中,局部内部类可以继续使用。

jdk1.8版本可以不加final,访问局部变量相当默认final,如果给局部变量改变了值或引用,那就无法默认为final了,此时会报错。

匿名内部类

没有名字的内部类,在定义类时同时创建仅能使用一次的实例。

前提

必须继承一个类或者实现接口。(类可以是具体类也可以是抽象类。)

格式

new 类或者接口(){重写方法;}

调用

一个方法:new 类或者接口(){重写方法}.方法名;

多个方法:类 对象 = new 类或者接口(){重写方法};

对象.方法;

对象.方法2;

本质

是一个继承了类或者实现了接口的子类匿名对象。

注意

匿名内部类中不能有静态的成员。

随着类实例的创建,该类定义会立即消失,匿名内部类不能重复使用。(只使用一次。)

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值