一、基础篇--1.1内部类
内部类主要有4种:
1.静态内部类(static inner class)
定义如下:
class OutClass{
static class InnerClass{} //静态内部类
}
静态内部类是指被声明为static的内部类,它不依赖与外部类实例而被实例化。静态内部类不能访问外部类的普通成员变量,只能访问外部类中的静态成员和静态方法(包含私有类型)。
2.成员内部类(member inner class)
定义如下:
class OutClass{
class InnerClass{} //成员内部类
}
成员内部类就是普通的内部类,可以自由引用外部类的方法,不管是静态还是非静态,但是内部不可以定义静态的方法和属性,而且只有被内部类被实例化后,这个类才能被实例化。
3.局部内部类(local inner class)
定义如下:
class OutClass{
public void doSomeWork(){
class innerClass{} //局部内部类
}
}
局部内部类是定义在代码块中的类,它的作用范围为所在的代码块中,极少用到。局部内部类跟局部变量比较类似,不能被public、protected、private以及static修饰,只能访问方法中定义为final类型的局部变量。如果局部内部类,在静态的代码块或者方法中,则会变成局部静态内部类。
4.匿名内部类(anonymous inner class)
定义如下:
class OutClass{
new Runnable(){
@Override
public void run() {
}
}.run();
}
匿名内部类是一个没有类名的内部类,不能使用关键字class、extends、implement,没有构造函数,自身必须继承其他类或者接口。匿名内部类的好处是代码更加简洁。使用内部类需要牢记一下几个原则:
1.匿名内部类不能有构造函数;
2.匿名内部类不能定义静态成员、方法和类;
3.匿名内部类不能是public、protected、private、static;
4.只能创建内部类的一个实例;
5.一个匿名内部类一定是在new的后面,必须继承一个父类或者实现一个接口;
6.匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。