内部类
概念 在类的内部定义一个新的类,这个新的类就称作内部类
当定义一个类 里面的功能主要 想为某一个类 所使用, 不想让其他的类访问到这个类的时候
内部类就是为 该内部类所在外部类服务的
格式
public class OutterClass {//外部类
public class InnerClass{ //内部类 是OutterClass的内部类
}
}
- 内部类 编译后生成的 class文件 是 外部类名称$内部类名称.class
示例:
class Outer { private static int num = 31; class Inner// 内部类。 { void show() { System.out.println("show run..."+num); } } public void method() { Inner in = new Inner(); in.show(); } }
内部类访问特点:
- 1 内部类可以直接访问外部类中的成员。
- 2 外部类要访问内部类,必须建立内部类的对象
内部类的分类
1、普通(成员)内部类
内部类调用外部类的方法 内----》外
外部类.this.外部类中的方法
OutterClass.this.get();
外部类调用内部类中方法 外----》内
外部类.内部类 变量名称 = new 外部类构造器. new 内部类构造器 ;
变量名称.内部类中的方法;
OutterClass.InnerClass oinner = new OutterClass().new InnerClass();
oinner.getInnerClass();
2、static内部类
//创建内部类对象
//外部类.内部类 变量名称 = new 外部类.内部类构造器;
OuterTwo.InnerStatic oi = new OuterTwo.InnerStatic();
//使用静态内部类中的方法
oi.getInnerMethod();
//当内部类和内部类中的方法都是static修饰的时候 可以如下直接使用
//外部类.内部类.内部类static修饰方法
OuterTwo.InnerStatic.getInnerMethod();
3、匿名内部类
就是没有名字的内部类
前提: 这个内部类去继承或实现 外部抽象类或外部接口时候 可以对内部进行简写
变为 匿名内部类
写法:
new 外部类或外部接口() { 重写抽象方法}
new A(){
@Override
public void getA() {
}
};
注意:匿名内部类 其实相当于 要使用外部类或外部接口的 一个对象;
什么时候使用:
当该外部类 只调用一个次的时候。
好处:
减少了内部类在内存中的生命周期