内部类
成员内部类
当成外部类的一个属性
1, 私有变量变得不“私有”了,访问起来很方便
public class Outter { private String outName = null; public void fun() { // 内部类(别的类可以直接使用私有变量) class Inner{ public void getInfo() { System.out.println(outName); } } } }
2, 在内部内中this指向外部类,“外部类.this”指向内部类
3, 实例化内部类:外部类.内部类 对象名 = new 外部类().new 内部类()
public class Outter { class Inner{ public void sayHi() { System.out.println("hi..."); } } public static void main(String[] args) { /* * 类型:外部类.内部类 * 先new外部类,再new内部类 * */ Outter.Inner innerc = new Outter().new Inner(); innerc.sayHi(); } }
4, private内部类:该内部类不能实例化
5, static内部类:在该内部类中同样不能访问静态变量和方法
6, 实例化static内部类:外部类.内部类 对象名 = new 外部类.内部类()
public class Outter { static class Inner{ public void sayHi() { System.out.println("hi..."); } } public static void main(String[] args) { /* * 类型:外部类.内部类 * 访问静态变量,再new * */ Outter.Inner innerc = new Outter.Inner(); innerc.sayHi(); } }
局部内部类
在方法中定义
不能直接使用方法的变量和参数(JDK1.8以下需使用fina修饰方法变量)
public class Outter { public static void main(String[] args) { String funName= null; class Inner{ // 内部类成员变量,用来传递方法变量 String innerName = null; public void getInfo() { // 直接使用方法变量,报错 name= "Marry"; // 把方法变量赋值给内部成员变量就可以使用了 innerName = funName; } } } }
匿名内部类
1,不能有构造函数
2,不能有静态成员变量或方法
3,属于局部内部类
new 父类构造器(参数列表)|实现接口() { //匿名内部类的类体部分 }
常用语swing编程或多线程
new Thread() { int num = 5; public void run() { while(num > 0){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } num--; System.out.println("线程A:" + num); } } };