java基础

java面向对象三——内部类

2019-06-25  本文已影响0人  LeoFranz

内部类的定义和分类

使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。接口只是解决了部分问题,而内部类使得多重继承的解决方案变得更加完整。

成员内部类可以理解为一种特殊成员,一般是不会直接暴露给外部使用的,需要用private保证封装性,然后在外部类中设置访问接口。

public void method() {
    if(condition) {
        Inner in = new Inner();
        in.function();
    }
}

非静态内部类实例创建时候必须依赖外部类的实例,其寄生在外部类实例中,所以非静态内部类会隐式地保存一个外部类的引用

一、非静态内部类

1.成员内部类

2、匿名内部类

3、局部内部类

二、静态内部类

它的创建是不需要依赖于外围类的。
它不能使用任何外围类的非static成员变量和方法,只能通过创建外部类对象可以访问。
接口内部类只能是静态内部类,默认使用了public static修饰符
标准访问格式为:
Outer.Inner inner = new Outer.Inner();
不能通过外部类对象进行访问或创建,我的理解是这样就表明外部类对象会被内部类对象引用。

总结区别

非静态内部类

使用内部类

1.在外部类中使用内部类
基本和使用普通类无差别,唯一注意的是不要在外部类的静态成员中直接调用非静态内部类,因为非静态内部类的调用首先要保证在外部类对象中创建实例

2.在外部类之外使用非静态内部类
必须在使用前创建外部类的实例,

OuterInstance.new InnerInstance()
或者
Out.In in = new Out().new In();

有个方法可以保证在创建非静态内部类时必定创建了外部类的实例

public class SubClass extends Out.In {
       public SubClass(Out out) {
              out.super();//通过传入out对象显示地调用in的构造器
}
}

3.在外部类以外使用静态内部类
Outer.StaticInner staticIn = new Outer.StaticInner();

上一篇 下一篇

猜你喜欢

热点阅读