在Java中,可以把一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包含四种:静态内部类、匿名内部类、成员内部类和局部内部类。
public class A{
class B{
}
}
注意:
定义在class类名{}花括号外部的,即使是在一个文件里,也不是内部类了
静态内部类
静态内部类的定义:
public class Test{
static class B{
}
}
和静态变量、静态方法类似,静态内部类也是和当前类(Test)绑定的,
使用时通过Test类来调用,如:
public class Test{
static class B{
}
public static void main(String [] args){
B b = new Test.B();
//在当前Test类 中使用的时候,也可以省略
B b = new B();
}
}
静态内部类和普通的外部类基本没有区别,唯一的区别在于名字上。
非静态内部类
class A{
class B{
}
}
非静态内部类,必须先有外部类的对象,才能使用——和对象有关
在一切用到内部类(静态OR非静态)的地方,都可以不用内部类去解决
匿名类
非静态内部类的变形 => 匿名类 (没有名字的类)
定义一个类的子类(没有名字),通知直接使用这个类,实例化出一个对象,这个类只能用一次
public class Test{
public static void main(String [] args){
B b = new B(){
@override
//重写父类的方法,
public void xxx(){
}
};
}
}
和B b = new B();这样的实例操作不同,匿名类后面会跟着一个大括号,重写父类的方法。
匿名类中只有一个方法需要重写的时候,可以使用lambda表达式
关于lambda表达式,我们以后再继续了解。
总结
- 类:是放置静态内容的组织单位,是用来实例化对象的模板
- 从定义类的位置来讲,类分为顶级类(外部类)和内部类
- 顶级类(外部类)分为又分为带public‘和不带public的
- 内部类分为 静态内部类和非静态内部类
- 非静态内部类 存在 匿名类
- 匿名类中只有一个方法需要重写的时候,可以使用lambda表达式