一、概念
故名思意,内部类就是在类内部的类,例如:
class A{
class B{
}
}
二、特点
1) 内部类可以直接访问外部类中的成员,包括私有成员
2) 外部类要访问内部类的成员,必须要建立内部类的对象
三、分类
1.成员内部类
相当于外部类的一个属性,创建对象和调用方法:
Outer outer = new Outer();//外部类对象
Outer.Inner inner = outer.new Inner(); //创造内部类对象
inner.innerShow();
2.静态内部类:
静态内部类的方法只能访问外部类的static关联的信息。
Outer.Inner.innerStaticShow();//Inner类被加载,此时外部类未被加载,独立存在,不依赖于外围类。
Outer.Inner oi = new Outer.Inner();
oi.innerShow(); //访问静态内部类的成员方法
3.局部内部类:
类前不能有修饰词,仅在这个方法中使用,无法创造静态信息,可以直接访问方法内的属性和参数,但是不能修改,可以随意访问外部类的信息。
4.匿名内部类:
匿名内部类,没有名字,通常和匿名对象一起使用,接口不能创建对象,下面的代码相当于创建了一个接口的匿名对象,然后后面的匿名内部类里面重写了它的抽象方法,但是这样最后只能调用一个方法。并且只能调用一次,抽象类的匿名内部类类似。
public class TestInner5 {
public static void main(String[] args) {
new Inner1() {//3.1接口的实现类
@Override
public void save() {//3.2重写接口中的抽象方法1
System.out.println("我是Inner1接口的save()");
}
@Override
public void get() {//3.2重写接口中的抽象方法2
System.out.println("我是Inner1接口的get()");
}
}.get();
//1.创建接口
interface Inner1{
//2.定义接口中的抽象方法
void save();
void get();
}