什么是内部类
定义:将一个类定义到另一个类的内部,那么这个类,就叫做内部类。按照定义位置不同分为成员内部类和局部内部类。
成员内部类
特点:
成员内部类访问外部类:直接访问外部类成员,包括私有。
外部类访问内部类:创建内部类对象。
测试类访问内部类:创建内部类对象。
格式: 外部类名.内部类名 对象名 = 外部类对象.内部类对象;
Outer.Inner inner=new Outer().new Inner();
成员内部类的修饰符:
1. 内部类被private 修饰符修饰后,测试类不能直接访问。得在外部的成员方法中创建内部类对象,调用内部类的方法,最后测试类再创建外部类的对象调用外部的成员方法,间接访问。
2. 内部类被static修饰后创建内部类对象的语法要改变:
外部类名.内部类名 对象名= new 外部类类名.内部对象;
Outer.Inner inner=new Outer.Inner();
代码示例
//未被私有化的内部类可以直接new
class demo {
public static void main(String[] args) {
Outer.Inter inter = new Outer.Inter(); //内部类未被私有,可以直接new出成员内部类
System.out..println(inter.num);
inter.InterShow();
}
}
class Outer{
class Inter{
int num = 10;
public void InterShow(){
System.out.println("成员内部类的show方法");
}
}
public void OuterShow(){
}
}
class demo {
public static void main(String[] args) {
Outer outer = new Outer();//成员内部类私有化了,只能在外部类中调用重写方法后重新使用它
outer.OuterShow();
}
}
class Outer{
private class Inter{
int num = 10;
public void InterShow(){
System.out.println("成员内部类的show方法");
}
}
public void OuterShow(){
Inter inter = new Inter(); //外部类中new内部类其功能属性。
System.out.println(inter.num);
inter.InterShow();
}
}
局部内部类
特点:
- 局部内部类访问外部类:直接访问外部类成员,包括私有。
- 局部内部类访问外部类的局部变量必须用final修饰。
- 测试类中不能直接创建局部内部类的对象。
代码示例
class demo {
public static void main(String[] args) {
Outer outer = new Outer();
outer.OuterShow(1);
}
}
class Outer{
int num =10;
private int a = 100;
public void OuterShow(final int a){
//定义局部内部类
//内部类可以直接调用外部类的成员变量包括私有
class Inter{
int c = 1;
public void interShow(){
System.out.println(num); //局部内部类访问外部成员变量的时候必须加上final修饰jdk1.8后自动加入
System.out.println(a);
System.out.println(c);
}
}
Inter inter = new Inter(); //使用局部内部类
inter.interShow(); //调用局部内部类方法
System.out.println(inter.c);//打印局部内部类常量
}
}