内部类概述
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么整个内部的完整结构最好使用内部类。
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。
inner class 一般用在定义它的类或语句块之内,在外部引用它时必须给出完整的名称。
有成员内部类与局部内部类之分。
public class InnerClassTest {
public static void main(final String[] args) {
// 实例化静态内部类
Person.Eye eye = new Person.Eye();
eye.blink();
// 实例化内部类
Person p = new Person();
Person.Mind mind = p.new Mind();
mind.speak();
// 局部内部类
// 下面两种局部内部类一般不会看见
// 局部内部类一般是一个实现了某个接口的实现类,通过调用方法得到一个实现类对象
// public Comparable getComparable(){
// class MyComparable implements Comparable{
// @Override
// public int comoareTo(Object o){
// return 0;
// }
// }
// return new MyComparable();
// }
// 也可以匿名实现这样一个内部类
// return new Comparable(){
// @Override
// public int comoareTo(Object o){
// return 0;
// }
// }
}
}
class Person{
String name = "小明";
/**
* 内部类
* 内部类可以作为外部类的成员,可以调用外部类的结构(静态内部类只能调用静态结构)
* 可以被final修饰,表示此类不能被继承
* 可以被abstract修饰
* 可以使用四种权限修饰符
*/
// 成员内部类
class Mind{
String name = "左脑";
public void reflection(){
System.out.println("思考");
}
public void speak(){
String name = "语言中枢";
System.out.println(name); // 局部变量name
System.out.println(this.name); // 内部类属性name
System.out.println(Person.this.name); // 外部类属性name
}
}
// 静态成员内部类
static class Eye{
public void blink(){
System.out.println("眨眼睛");
}
}
// 方法
public void method(){
// 局部内部类
class AA{
}
}
// 代码块
{
// 局部内部类
class BB{
}
}
}