一、成员内部类
class A{
class B{
}
}
格式如上所示,B为A的成员内部类,A为B的外部类。主要有以下的一些特性:
1.成员内部类可以无条件访问外部类的属性和方法,
2.当外部类需要访问成员内部类的属性和方法时,则需要创建一个内部类对象进行访问,在其他类中创建方式为:A a = new A(); B b = a.new B(); 如果是在类A中则只需 B b = new B();
3.内部类与外部类的属性或方法相同时:外部类的属性和方法在内部类中将被隐藏,这时如果要访问就需要this关键字:A.this.属性/方法。
4.可加四种访问修饰符
二、静态内部类
class E {
static class F{
}
}
格式如上所示,可以看到和全局内部类差一个static,这个static是什么呢?之前看过一句话总结的很到位:
static可以用来区分成员变量、方法是属于类本身还是属于类实例化后的对象。有static修饰的成员属于类本身,没有static修饰的成员属于类的实例。
静态内部类和静态方法类似,只能访问静态成员变量和方法,原因:外部类加载时只会加载静态域。
静态内部类可以声明普通成员变量和方法,成员内部类不能声明static成员变量和方法。
创建对象的方式:F f = new E.F();
当外部类需要使用内部类,且内部类无需外部类资源,并且内部类可以单独创建时使用。
三、局部内部类
class C{
public void hello(){
class D{
}
}
}
格式如上图所示,局部内部类存在于方法之中,因此,其访问权限受限,仅限于方法或作用域内。
类似于局部变量,前面不能使用 访问修饰符和static修饰符。
四、匿名内部类
定义一个类的同时对其进行实例化。它与局部类很相似,不同的是它没有类名,当某个局部类你只需要用一次,就可以使用匿名内部类。
匿名内部类主要分为实现接口的和继承父类的两种,代码实例此时不方便列出,详细的内容可以参考匿名内部类详解。