内部类详解

Posted yxj808

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了内部类详解相关的知识,希望对你有一定的参考价值。

内部类:在类中的另外一个类。
1.分类
1)成员内部类:在类的成员变量/成员方法位置编写,与外部类的属性、方法并列。
2)静态内部类: 定义在类中,任何方法外,用static修饰
3)局部内部类:在方法中定义的类,与局部变量类似。
4)匿名内部类:没有名字的类
2.成员内部类
1)可以访问外部类的所有属性。
2)可以定义非静态属性和方法,不可以定义static修饰的属性和方法,可以定义static final修饰的编译期变量【不用加载类的字节码】
3)为什么不可以定义static修饰的属性和方法?
内部类是外部类的一个成员,外部类初始化的时候,内部类才能初始化,static修饰的属于类,在类加载的 时候就要初始化,前后矛盾
static final 修饰的变量叫常量,
常量分为编译期常量,程序编译【不需要加载类的字节码】,就可以确定常量的值
非编译期常量。程序运行【需要加载类的字节码】,确定常量的值
4)方法的调用:
     4.1)内部类调用:
                         调用自己的方法属性:直接调用  或者this.属性名、this.方法名();
                          调用外部类的方法属性:外部类.this.属性名、 外部类.this.方法名();
      4.2) 外部类调用:
                         普通方法:构建内部类对象--》对象名.方法名();
                          main方法:构建外部类对象--》构建内部类对象---》对象名.方法();

3.静态内部类
3.1)可以定义静态的成员、非静态的成员
3.2)方法属性调用:
3.2.1内部类调用
   调用自己的静态属性、方法:类名.属性名 ;类名.方法名;
   调用自己的普通方法:直接调用、this.方法名;
   调用外部的静态方法属性:外部类名.方法名;
  不能调用外部的普通方法  
3.2.2外部类调用
                         非静态:对象名.属性名
                             静态: 类名.属性名
   
4.局部内部类(在方法体中定义)
1)不能使用任何的访问修饰符
2)不可以定义静态的方法属性(同成员内部类)
3)方法调用:内部类调用:(同成员内部类)
                     访问局部变量: 局部内部类只能访问方法中声明的final类型的变量。
                     外部类调用: 不能访问内部类的任何属性方法                          
4)为什么外部类不能访问局部内部类的属性、方法?
因为局部内部类定义在方法中,而方法需要所在类的对象去调用。
5)为什么局部变量类只能访问局部变量中final修饰的变量?
内部类的生命周期比方法长。

5.匿名内部类:没有名字的内部类
作用:一般用匿名内部类来实现某接口(使用不多,不需要写一个类实现该接口,可以使用匿名内部类)【匿名内部类一般就是用来实现接口:
重写接口(抽象类)中的方法
声明:
        interface A{
            public void showA();
        }
        eg:   A a = new A(){
            public void showA(){
            }
              };
可用于集合中的比较器
    abstract class B{
            public void showB(){}
            public abstract void shohome();
        }
        eg:
            B b = new B(){
                //可以重写showB 可以不重写
                public void shohome(){}//抽象方法一定要实现
            };
        解释:这里并不是new了接口, 而是多态, new的是接口的实现类,这个实现类就是匿名内部类充当了




以上是关于内部类详解的主要内容,如果未能解决你的问题,请参考以下文章

Java——内部类详解

Java内部类详解

Java—内部类详解

Java内部类详解(含:成员内部类局部内部类匿名内部类静态内部类)

内部类详解(很详细)

面向对象编程(十六)——内部类详解