//外嵌类
public class Test{
//内嵌类
class Teacher{
public void teach(){
}
}
public static void main(){
}
}
(1)外嵌类:自己内部定义了类的类
(2)内嵌类:在其他类中定义的类
类是由属性和行为构成,具体来说是成员变量和方法。
内部类相当于是外嵌类特殊的成员变量【注明2】
当内部类和外嵌类有重名成员,想要调用外嵌类的成员时,需要 外嵌类名.this.成员名
(1)内部类可以访问所在类的所有成员,即使该成员是private的。
(2)外嵌类不能直接访问内部类的所有成员,需要先创建内部类的对象,通过内部类的对象来访问
常见调用内部类方法的手段
public Teacher getTeacher(){ //创建一个返回内部类对象的函数
return new Teacher();
}
在main函数中
(1)创建外嵌类的对象
(2)通过外嵌类对象调用上述方法
(3)通过上述方法调用需要的内部类对象
Test test = new Test();
test.getTeacher().teach();
//局部内部类:在函数内部创建的类
public void test(){
class Student{
}
}
局部内部类的对象 只能在该函数中使用
局部内部类前不能加访问限定符,如public
//匿名类:没有名字
//直接允许一个类的子类,用这个子类的类体创建一个子类的对象
Test test = new Test(){
}
在java中不常见,在javaScript中常见
类似于上转型对象,可以重写外嵌类的方法,调用是显示的是重写后的【注明1】
类似于上转型对象,test是外嵌类的方法,是不能够调用子类新增的方法,所以匿名类新增的方法,永远不会被调用
【注明1:局部变量前不能加访问限定符,否则报错】
【注明2:定义在一个类内部的类,叫作“嵌套类”。嵌套类分为两种:static的和非static的。后者又有一个专门的名字,叫作“内部类”。】