11. 内部类
将类定义在另一个类的内部则成为内部类。
在一个类中,定义在类中的叫成员变量,定义在函数中的叫成员函数,那么根据类定义的位置也可以分为成员内部类和局部内部类。
内部类生产的class文件为 “外部类$内部类.class”,为了标明该内部类是属于具体哪个外部类。
1. 内部类可以直接访问外部类的成员属性。(孙悟空相当于内部类飞到铁扇公主的肚子里面去)。
2. 外部类需要访问内部类的成员属性时需要创建内部类的对象。
1)在外部类的成员函数中创建内部类的对象,通过内部类对象直接访问内部类的成员。
2)在其他类中直接创建内部类的对象。
(由于此部分用的很少,就不贴代码啦 ̄へ ̄。。。)
什么时候使用内部类呢?
当我们分析事物时,发现事物的内部还有具体的事物,这时则应该定义内部类了。
比如人体是一个类,人体有心脏,心脏的功能在直接访问人体的其他内容。这时就将心脏定义在人体类中,作为内部类存在。
(由于此部分用的很少,就不贴代码啦 ̄へ ̄。。。)
内部类的优势:
成员内部类作为外部类的成员,那么可以访问外部类的任意成员。
1. 私有的成员内部类
特点:不能在其他类中直接创建内部类对象来访问
2. 静态的成员内部类
特点:如果内部类中包含有静态成员,那么内部类必须声明为静态内部类的形式:
匿名内部类:
没有名字的类,这种类必须重写一个类或继承一个抽象类或实现一个接口,用于精简代码。
之前说过抽象类和接口不能创建对象,但其实可以用匿名内部类创建对象,只需要在new的时候实现接口或抽象类中未实现的方法即可。
匿名内部类用的还是蛮多的,咱举个栗子:
abstract class Animal {
public abstract void say();
}
public class Test1 {
public static void main(String[] args) {
Animal animal = new Animal() {
@Override
public void say() {
System.out.println("不知名动物在嘶喊。。。");
}
};
animal.say();
}
}