Java中内部类简介

内部类

分类

  1. 成员内部类

  2. 局部内部类

  3. 匿名内部类

  4. 静态内部类

成员内部类

常见形式:

 public class external(){
     public class inside(){
         //这是一个内部类
     }
 }

特点:

  1. 解决java没有多继承问题(内部类继承一个父类,外部类继承一个父类,变相的多继承)

  2. 成员内部类可以直接使用外部类的属性、方法(包括私有的)

  3. 当外部要实例内部类时,注意内部类的访问修饰符

  4. 当外部类与内部类的属性名或者方法同名时,内部的属性方法通过this.调用,外部的属性方法通过外部类名.this.调用

局部内部类

常见形式:

 public class external(){
     public void method(){
         class local(){
             //这是一个局部内部类
         }
     }
 }

特点:

  1. 无访问修饰符

  2. 局部内部类或者匿名内部类。如果要使用外部类的局部变量(包括形参,全局变量不包括)

    那么这个局部变量必须是final修饰的,及为常量

    JDK1.8之前必须声明final,JDK1.8之后编译时自动添加final

    (方法调用完会销毁,而局部内部类不会马上销毁,这是,如果调用的不是常量会出现异议)

  3. 局部内部类也会生成.class文件

静态内部类

常见形式:

 public class external(){
     public static class inside(){
         //这是一个静态内部类
     }
 }

特点:

  1. 不可访问外部类中非静态的属性方法

  2. 静态内部类在外部中无法实例化

  3. 调用:

    外部类调用:外部类名.内部类名.静态方法名()

    外部调用:外部类的对象.内部类名.静态方法名()

  4. 注意static与class的位置关系,如果书写为 class static会编译报错

匿名内部类】

常见形式:

 //Anonymous是一个抽象类 , abstract_method是Anonymous中的一个抽象方法
 public abstract class Anonymous(){
     public abstract void abstract_method();
 }
 //External是一个类 , method是External中的方法,参数的类型是anonymous
 public class External(){
     public void method(Anonymous anonymous){
         }
     }
 }
 //要生成一个实现abstract_method方法的匿名内部类
 public class Test(){
     public static void main(String[] args){
         External external = new External();
         external.method(new Anonymous(){
             //这是一个匿名内部类
             public void abstract_method(){}
         });
     }
 }

特点:

  1. 使用方便

  2. 不生成.Class文件

posted @ 2019-12-10 22:51  是非_大道克己  阅读(203)  评论(0编辑  收藏  举报