本文共 3023 字,大约阅读时间需要 10 分钟。
由于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中的四种匿名类,希望能加深读者对匿名类的理解。
转载地址:http://rsgmi.baihongyu.com/