1.成员内部类
(1)作为外部类的一个成员变量
(2)可以直接访问外部类的所有成员,包括私有
(3)可以添加任意访问修饰符
class Outer {
private int age = 99;
String name = "Coco";
public class Inner {
String name = "Jayden";
public void show() {
System.out.println(Outer.this.name); //Coco
System.out.println(name); //Jayden
System.out.println(age); //99
}
}
public static void main(String[] args) {
Outer o = new Outer();
Inner in = o.new Inner();
in.show();
}
}
2.静态内部类
(1)作为外部类的一个成员变量,用static修饰
(2)可以直接访问外部类的所有静态成员,包括私有,但是不能访问外部类的非静态成员
(3)可以添加任意访问修饰符
class Outer{
private int age = 99;
static String name = "Coco";
public static class Inner{
String name = "Jayden";
public void show(){
System.out.println(Outer.name); //Coco
System.out.println(name); //Jayden
}
}
public static void main(String[] args){
Inner i = new Inner();
i.show();
}
}
3.局部内部类
(1)作为外部类的一个局部变量,定义在方法或者代码块中
(2)可以直接访问外部类的所有成员,包括私有
(3)没有访问修饰符,但是可以用final修饰
class Outer{
public void show(){
final int a = 25;
int b = 13;
class Inner{
int c = 2;
public void print(){
System.out.println(a); //25
System.out.println(c); //2
}
}
Inner i = new Inner();
i.print();
}
public static void main(String[] args){
Outer o = new Outer();
o.show();
}
}
4.匿名内部类
(1)作为外部类的一个局部变量,定义在方法或者代码块中
(2)可以直接访问外部类的所有成员,包括私有
(3)没有访问修饰符
class OuterClass {
public InnerClass getInnerClass(final int num, String str2) {
return new InnerClass() {
int number = num + 3;
public int getNumber() {
return number;
}
};
}
public static void main(String[] args) {
OuterClass out = new OuterClass();
InnerClass inner = out.getInnerClass(2, "chenssy");
System.out.println(inner.getNumber()); //5
}
}
interface InnerClass {
int getNumber();
}