Java内部类
使用内部类的原因
- 内部类方法可以访问该类定义所在的作用域中的数据, 包括私有的数据.
- 内部类可以对同一个包中的其他类隐藏起来.
- 当想要定义一个回调函数且不想编写大量代码时, 使用匿名内部类比较快捷.
注意: 内部类中声明的所有静态域都必须是fnal. 原因很简单, 我们希望一个静态域只有一个实例, 不过对于每个外部对象, 会分别有一个单独的内部类实例. 如果这个域不是final, 它可能就不是唯一的.
内部类中不要使用static方法!!!
非静态内部类
语法:
内部类 实例名 = 外部类实例.new 内部类();
AA outside = new AA();
BB inside = outside.new BB();
//AA, BB 均为类名
静态内部类
静态内部类不需要外部类的实例化
语法:
外部类.内部类 实例名 = new 外部类.内部类();
AA.BB inside = new AA.BB();
匿名类
匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练.
通常情况下,要使用一个接口或者抽象类,都必须创建一个子类.
public abstract class A {
public abstract void HEY();
}
public class B extends A{
public void HEY() {
}
}
public static void main(String[] args) {
B beta = new B();
beta.HEY();
System.out.println(beta);
A alpha = new A(){ //当场实现HEY方法
public void HEY(){
System.out.println("当场实现!");
}
};
alpha.HEY();
System.out.println(alpha);
}
/*
打印结果:
t2.B@15db9742
当场实现!
t2.test_main$1@6d06d69c
*/
通过打印alpha我们发现这个对象属于test_main$1这么一个系统分配的类名.
回归主题, 既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。这样的类,叫做匿名类