ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

11.内部类

11.内部类 一、基本概念内部类定义在另一个类的内部的类。// 外部类 class Outer{ // 内部类 class Inner{} }内部类编译完成后会生成独立的 .class 文件文件命名格式外部类类名$内部类类名.class。内部类可以直接访问外部类的私有成员同时不会破坏外部类的封装特性。内部类一共分为 4 种成员内部类、静态内部类、局部内部类、匿名内部类。二、内部类的 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) 访问静态内部类的静态成员外部类类名.静态内部类类名.静态成员plaintext外部类类名.静态内部类类名.静态属性名外部类类名.静态内部类类名.静态方法名(实参);(5) 访问权限静态内部类只能访问外部类的静态成员静态属性、静态方法不能直接访问外部类实例成员。3. 局部内部类类比局部变量(1) 位置定义在方法的内部。(2) 对象创建只能在定义该局部内部类的方法内、类定义完成之后创建它的对象。(3) 访问方法局部变量局部内部类的方法可以访问所在方法中的局部变量但该局部变量必须被final修饰。补充说明JDK 8 及以上为语法糖机制当编译器检测到局部变量被局部内部类的方法调用时会自动隐式给变量加上final不需要手动书写。4. 匿名内部类特殊的局部内部类(1) 要求匿名内部类必须继承某个父类或者实现某个接口。(2) 特点一个匿名内部类仅能生成一个实例对象类的定义与对象创建写在一起没有类名。(3) 基础语法java运行接口名 引用变量 new 接口名(){// 实现接口的抽象方法};(4) 优缺点优点减少代码书写量代码逻辑连贯。缺点缺少类名代码可读性较差。示例 1实现接口的匿名内部类interface IA{ void m1(); } public class Test{ public static void main(String[] args){ IA ia new IA(){ Override public void m1(){ // 方法实现逻辑 } }; } }示例 2继承普通类的匿名内部类public class Test { public static void main(String[] args) { MyClass mc new MyClass(){ Override public void method(){ System.out.println(子类重写后的方法……); } }; mc.method(); } } class MyClass{ public void method(){ System.out.println(父类中method方法……); } }
返回列表