前言
由于Java语言不支持多继承,而在实际开发中可能会面临多重继承的场景的,内部类便可派上用场了。
内部类
java内部类分为: 成员内部类、静态内部类、方法内部类、匿名内部类 。
成员内部类
顾名思义,成员内部类作为类的成员,存在于某个类的内部。成员内部类可以调用外部类的所有成员,但只有在创建了外部类的对象后,才能调用外部的成员。
public class OutClass01 {
private String name;
private int age;
public OutClass01(String name, int a){
System.out.println("正在初始化外部类");
this.name = name;
this.age = age;
}
public void print(){
System.out.println("外部类中的print方法");
System.out.println("外部类中的name:"+name);
System.out.println("外部类中的age:"+age);
}
class InnerClass01{
public void print(){
System.out.println("内部类中的print方法");
System.out.println("内部类访问外部类中的name:"+name);
System.out.println("内部类访问外部类中的age:"+age);
}
}
public static void main(String[] args) {
OutClass01 out = new OutClass01("Alex", 20);
InnerClass01 in = out.new InnerClass01();
out.print();
in.print();
}
}
静态内部类
静态内部类,作为类的静态成员,存在于某个类的内部。静态内部类虽然是外部类的成员,但是在未创建外部类的对象的情况下,可以直接创建静态内部类的对象。静态内部类可以引用外部类的静态成员变量和静态方法,但不能引用外部类的普通成员。
public class OutClass02 {
private String name;
private int age;
private static String id = "0123456789";
public OutClass02(String name, int a){
System.out.println("正在初始化外部类");
this.name = name;
this.age = age;
}
public void print01(){
System.out.println("外部类中的print方法");
System.out.println("外部类中的name:"+name);
System.out.println("外部类中的age:"+age);
}
public static void print02(){
System.out.println("外部类中的print方法");
System.out.println("外部类中的id:"+id);
}
static class InnerClass02{
public void print(){
System.out.println("内部类中的print方法");
print02();
}
}
public static void main(String[] args) {
InnerClass02 in = new InnerClass02();
in.print();
}
}
方法内部类
方法内部类,存在于某个方法的内部,只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
public class OutClass03 {
public void print(){
final int a = 10;
class InnerClass03{
int b = 20;
public void print(){
//使用所在方法中的局部变量,那么就需要将这个局部变量定义为final的。
System.out.println("访问内部类中的成员a:"+a);
System.out.println("访问内部类中的成员b:"+b);
}
}
InnerClass03 in = new InnerClass03();
in.print();
}
public static void main(String[] args) {
OutClass03 out = new OutClass03();
out.print();
}
}
匿名内部类
匿名内部类,存在于某个类的内部,但是无类名的类。匿名内部类的定义与对象的创建合并在一起,匿名内部类一般通过如下形式定义,并且在定义的同时进行对象的实例化。
public class OutClass04 {
public void print(InnerClass04 in){
in.show();
}
public static void main(String[] args) {
OutClass04 out = new OutClass04();
out.print(new InnerClass04(){
//内部类主体
public void show(){
System.out.println("在匿名内部类中");
}
});
}
}
class InnerClass04{
public void show(){
System.out.println("在InnerClass04类中");
}
}
总结
本文介绍了Java中的四种匿名类,希望能加深读者对匿名类的理解。