内部类指的是 把类定义在另一个类的内部,该类就被称为内部类。类名不需要和源文件名相同。
内部类的种类:
在Java中,内部类的使用共有两种情况:
(1). 在类中定义一个类(成员内部类,静态内部类);
(2). 在方法中定义一个类(局部内部类,匿名内部类)。
局部内部类(本地内部类) : 定义在方法当中的类.
只能在当前方法中使用,出了方法就没办法使用.
public class TestDemo { public void func() { class In{ private int a; public String str; } //局部内部类 缺点 :只能在当前方法中使用 } }
成员内部类也叫实例内部类,可以把他当作是外部类的一个普通实例的成员.
class OuterClass { public int data1 = 1; private int data2 = 2; public static int data3 = 3; // 实例内部类 class InnerClass{ public int data4 = 4; private int data5 = 5; public static final int data6 = 6; public InnerClass() { System.out.println("不带参数的内部类的构造方法"); } public void test() { System.out.println("InnerClass::test()"); } } public void func(){ System.out.println("OuterClass::func1()"); } }
如果非要定义,只能定义 1 个,静态常量.(static final)
外部类名.内部类名 变量 = 外部类对象的引用.new 内部类();
OuterClass$InnerClass
外部类$内部类.class
class OuterClass { public int data1 = 1; private int data2 = 2; public static int data3 = 3; // 静态内部类 static class Innerclass{ public int data4 = 5; private int data5 = 5; private static int data6 = 6; public void test(){ System.out.println("InnerClass::test()"); } } }
外部类名.内部类名 变量 = new 外部类名.内部类名();
class Out{ public void test(){ System.out.println("hello!"); } } public class Test { public static void main(String[] args) { new Out(){ }; } }
匿名内部类调用test()方法.
匿名内部类调用重写的test()方法