代码
package wlvgfe2016819;
public class Test2016822 {
private static final String EXTERNAL="外部类的常量";
private String v1="外部类私有属性";
public static void main(String[] args) {
Test2016822 t1=new Test2016822();
System.out.println(Test2016822.TestClass1.HELLO);
Test2016822.TestClass1 t2=t1.new TestClass1();
t2.getData();
t2.getPrivate();
Test2016822.TestClass2 t3=new Test2016822.TestClass2();
t3.getData();
Thread t4=new Thread(t1.worker1);
t4.start();
}
public class TestClass1{
public static final String HELLO="hello";
public void getData(){
System.out.println("内部类对象方法调用");
}
public void getPrivate(){
System.out.println(Test2016822.EXTERNAL);
System.out.println(Test2016822.this.v1);
}
}
public static class TestClass2{
public void getData(){
System.out.println("静态内部类的方法调用");
}
}
Runnable worker1=new Runnable() {
@Override
public void run() {
System.out.println("开始了一个线程");
}
};
}
知识总结:
- 内部类是指定义在其他类内部的类,可以使用public、private、protected等访问权限控制,可以看成是外部类的成员,可以无条件的访问外部类的成员,甚至包括private 成员。内部类调用父类的成员可以通过 外部类.this.xxxx这种方式。但是外部类如果想要访问内部类的成员,则需要通过创建实例,并通过创建实例进行访问
- 创建内部类的实例可以通过这种方式进行,Test.xxx x1=new Test().new xxx();
- 静态内部类的实例的创建可以采用这种方式,Test.xxx x1=new Test.xxx();
- 静态内部类独立于外部类,不可以随意访问外部类的成员,静态内部类相当于扩展了外部类的命名空间
- 抽象类或者接口的类都可以通过匿名内部类来实现,例如Runable接口就是通过匿名内部类一次实现的