顾名思义,内部类就是在一个类的里面定义另一个类。
①内部类的访问特点:
1.内部类可以直接访问外部类的成员(包括私有)
2.外部类要访问内部类的成员,则必须创建对象。
实例:
public class Apple{ //外部类
String color;
String taste;
int time;
public void show2{
System.out.println(color);
//System.out.println(price);//无法获取内部类成员,需要这样做:
buy B = new buy();
System.out.println(B.price);
}
class buy{ //内部类
int price;
int number;
public void show(){
System.out.println(price);
System.out.println(taste);//内部类直接访问外部类成员
}
}
}
②内部类的类型:
1.成员内部类
同刚才的代码,内部类写在成员位置的,属于外部类的成员(Apple.buy)
public class Apple{ //外部类
......
class buy{ //成员内部类
......
}
}
成员内部类可以被一些修饰符所修饰,如private,public,static等
(JDK16后成员内部类里面可以定义静态变量)
实例化成员内部类可以在外部类中定义方法返回内部类,也可以调用成员
Apple.buy apple = new Apple().new buy()
2.静态内部类 *
成员内部类加上static修饰符,只能访问外部类中的静态变量和静态方法,如果要访问非静态需要创建对象。
创建对象格式:外部类名.内部类名 对象名 = new 外部类名.内部类名();
调用静态方法格式:外部类名.内部类名.方法名();
3.局部内部类 *
将内部类定义在方法中就叫局部内部类,类似于方法里的局部变量。
外界无法直接使用局部内部类,需要在内部类所在方法中实例化对象并使用。
4.匿名内部类
本质上是隐藏了名字的内部类。
格式:
new 类名或接口名(){
重写方法;
};
举例:
Inter s = new Inter(){
public void show(){
System.out.println("重写了show方法";
}
};
s.show();
特点:实例化、重写方法、继承一体化。
此外,还可以立刻调用自己的方法:
new Inter(){
public void show(){
System.out.println("重写了show方法";
}
}.show();