Java 类和对象(二)

目录

12 内部类 

12.1 内部类的定义

12.2 内部类的分类

12.2.1 实例内部类

12.2.2 静态内部类

12.2.3 局部内部类

12.2.4 匿名内部类


12 内部类 

12.1 内部类的定义


Java 中的内部类是一个被定义在另一个类内部的类 


① 定义在 class 类名{}花括号外部的,即使是在一个文件里,都不能称为内部类


② 内部类和外部类共用同一个 java 源文件,但是经过编译之后,内部类会形成单独的字节码文件


12.2 内部类的分类


成员内部类(实例内部类、静态内部类)、局部内部类、匿名内部类


12.2.1 实例内部类

即未被 static 修饰的成员内部类


① 在实例内部类的成员变量不能是静态的


 

原因:实例内部类是需要外部类引用对象调用的,而静态成员是不需要实例化对象的


解决方法:加上 final,此时就不是变量而是常量了,编译时就确定了,就不依赖于有没有对象了


实例化内部类对象不能直接主函数里 new 生成对象


解决方法

先通过外部类生成一个外部对象,其次通过外部类对象的引用来实例内部类对象


② 实例内部类对象必须在先有外部类对象前提下才能创建



因为其本身是实例内部成员,因此要有外部类的引用


在实例内部类方法中访问同名的成员时,优先访问自己的


③ 如果要访问外部类同名的成员,必须:外部类名称.this.同名成员来访问



④ 实例内部类的非静态方法中包含了一个指向外部类对象的引用


 


外部类中,不能直接访问实例内部类中的成员


⑤ 如果要访问必须先要创建内部类的对象

(调用成员方法的同时也先需要实例化外部类对象)



⑥ 外部类中的任何成员都可以在实例内部类方法中直接访问



⑦ 实例内部类所处的位置与外部类成员位置相同,受 publicprivate 等访问限定符的约束


12.2.2 静态内部类

被 static 修饰的内部成员类称为静态内部类



创建静态内部类对象时,不需要先创建外部类对象



在静态内部类中只能访问外部类中的静态成员


如果一定在内部类访问外部类中非静态成员就要创建外部类对象然后利用对象引用访问



12.2.3 局部内部类

定义在外部类的方法体或者 {} 中


该种内部类只能在其定义的位置(该方法体内部)使用,一般使用的非常少



不能被 public、static 等修饰符修饰


编译器也有自己独立的字节码文件,命名格式:外部类名字$数字内部类名字.class



12.2.4 匿名内部类

相当于有一个类继承了 IA 接口重写了 test方法


可以用 IA 接收一下这个匿名对象,已经 new 过了


通过对象的引用去调用 test方法


或者直接匿名对象.test方法调用


打印结果


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值