Java内部类

一、概念 1. 内部类:定义在一个类内部的类。 2. 内部类编译之后生成独立的 .class 文件,命名: 外部类类名$内部类类名.class 3. 内部类可以直接使用外部类私有成员,从而不破坏外部类的封装性。 4. 内部类的分类:成员内部类、静态内部类、局部内部类、匿名内部类。 二、内部类的分类 1. 成员内部类:类比于实例变量 【了解】 (1) 位置:定义在类以内,方法以外。 (2) 成员内部类对象的创建,必须依赖于外部类的对象而创建: Outer o = new Outer(); // 外部类的对象 Outer.Inner i = o.new Inner(); // 内部类的对象 (3) 外部类的当前对象:外部类类名.this 外部类类名.this.属性名 -》访问外部类的属性 外部类类名.this.成员方法名(参数) ; ---->调用外部类的成员方法 (4) 成员内部类中不能定义静态成员(静态属性和静态方法) 2. 静态内部类:类比于静态变量【了解】 (1) 位置:定义在类以内,方法以外,同时被 static 修饰 (2) 静态内部类中可以定义实例变量,也可以定义静态变量 (3) 创建静态内部类的对象,只需要依赖于外部类的类名即可: Outer.Inner i = new Outer.Inner(); (4) 访问静态内部类的静态成员时,可以直接通过 外部类类名.静态内部类类名 进行访问。 外部类类名.静态内部类类名.静态属性名 外部类类名.静态内部类类名.静态方法名(实参); (5) 静态内部类只能访问外部类的静态成员(静态属性和静态的方法) 3. 局部内部类:类比于局部变量 (1) 位置:定义在方法内部 (2) 局部内部类对象的创建,必须在定义它的方法内部创建,并且在类的定义位置后面完成对象的创建 // 外部类 class Outer{ // 内部类    class Inner{} } 1 2 3 4 5(3) 局部内部类的方法中可以访问定义它的方法内部的局部变量,但是要求局部变量必须 被 final 修饰。 注意:JDK8.0及以上版本,编译器编译时,如果检测到局部变量被局部内部类中方法访问,则默认 为此局部变量前面 final ,这种技术被称为语法糖。   4. 匿名内部类:是一个特殊的局部内部类 (1) 匿名内部类的定义必须继承一个类或是实现一个接口 (2) 基于一个匿名内部类只能创建该类的一个对象,并且匿名内部类的定义和对象的创建一起完成。 (3) 语法: 接口名 引用名 = new 接口名(){ // 接口中需要实现的方法 }; (4) 匿名内部类的优缺点: a. 优点:减小代码量,让编程思路连贯。 b. 缺点:可读性低。 案例:     interface IA{    void m1(); } public class Test{    public static void main(String[] args){        IA ia = new IA(){            public void m1(){}       };   } } 1 2 3 4 5 6 7 8 9 10 11 public class Test { public static void main(String[] args) { MyClass mc =new MyClass(){ public void method(){ System.out.println("子类覆盖后的方法。。。"); } }; mc.method(); } } class MyClass{ 1 2 3 4 5 6 7 8 9 10 11 12 13  public void method(){ System.out.println("父类中method方法/..."); } }

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值