目录
一、介绍
一个类的内部又嵌套了一个类,这样的类我们称为内部类,被嵌套的类称为外部类。
二、基本语法
class A{ //外部类 class B{ //内部类 } } class C{ //外部其他类 }
三、特点
可以直接访问私有属性,并且可以体现类与类之间的包含关系。
四、分类
(一)定义在外部类局部位置上(方法内)
1、局部内部类
介绍
定义在外部类的局部位置,且有类名。
特点
(1)可直接访问内部类的所有成员
(2)不可以添加访问修饰符
(3)仅仅作用在定义它的方法或代码块中
示例
class A{//外部类
private int n1 = 100;
private void m2(){
int n2 = 200;
System.out.println("n2 = " + n2);
}
public void m1(){
class B{//局部内部类
public void f1(){
System.out.println("n1 = " + n1);//局部内部类可以访问外部类的成员变量
m2();//局部内部类可以访问外部类的非静态成员方法
}
}
}
}
2、匿名内部类
介绍
与局部内部类相同,定义在外部类的方法中,但是没有类名。
特点
匿名内部类既是一个类的定义,同时也是一个对象,因此,它既有类的特征,也有对象的特征。
示例
class A{//外部其他类
public void hi(){
System.out.println("hi");
}
}
class B{//外部类
private int n1 = 10;
public void f1(){
new A(){//创建匿名内部类
public void hi(){
System.out.println("匿名内部类重写hi()方法");
}
}.hi();//调用匿名内部类重写的hi()方法
}
}
(二)定义在外部类的成员位置上
1、成员内部类(无static修饰)
介绍
定义在外部类的成员位置,且没有static修饰。
特点
(1)可访问外部类的所有成员
(2)可添加任意修饰符(public、protected、默认、private)。
示例
class A {//外部类
private int n = 10;
class B {//成员内部类
public void print() {//内部类的方法
System.out.println(n);
}
}
public void f1(){
B b = new B();//成员内部类对象
b.print();//调用成员内部类的方法
}
}
2、静态内部类(有static修饰)
介绍
定义在外部类的成员位置,有static修饰。
特点
(1)可以访问所有静态成员,但不能访问非静态成员。
(2)可添加任意修饰符(public、protected、默认、private)。
(3)作用于整个类体。
示例
class A {//外部类
private int n = 10;//实例变量
private static int m = 20;//静态变量
static class B {//静态内部类
public void print() {
System.out.println("n=" + A.m);//访问外部类的静态变量
}
}
}