成员内部类也是最普通的内部类,它是外围类的一个成员,所以他是可以无限制的访问外围类的所有 成员属性和方法,尽管是private的,但是外围类要访问内部类的成员属性和方法则需要通过内部类实例来访问。
public class InnerClass2 {
public static void main(String[] args) {
//创建内部类对象,并执行show()
/* -- Outer2.Inner2 oi = new Outer2().new Inner2();
* -- 报错,Inner2已经被private了
*/
//3,测试被private的内部类的资源能否执行!
new Outer2().test();
}
}
class Outer2{
//2,如果想要访问private的内部类,可以访问外部类提供的对应方法
public void test() {
//访问内部类方法
new Inner2().show();
}
//位置在类里方法外--成员内部类
//1,内部类可以被private修饰,但是外界无法直接创建对象了!
private class Inner2{
public void show() {
System.out.println("Inner2.show()");
}
}
}
观察上面的代码,我们看清几个地方:
-- 匿名内部类是没有访问修饰符的。
-- new 匿名内部类,这个类首先是要存在的。如果我们将那个InnerClass接口注释掉,就会出现编译出错。
-- 匿名内部类是没有构造方法的。因为它连名字都没有何来构造方法。
总结:我们为什么要使用内部类呢?看过《Think in java》的应该都知道,其中有这样一句话:“Java在程序设计中使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。”甚至可以这样说,接口只是解决了部分问题,而内部类使得多重继承的方法方式使解决方案变得更加完整。