静态内部类

非静态内部类:

    非静态内部类中不能有静态方法、静态成员变量、静态初始化块。

静态内部类:

    如果使用static修饰一个内部类,则这个内部类就属于外部类本身,而不属性外部类的某个对象。

    静态内部类可以包含静态成员,也可以包含非静态成员。根据静态成员不能访问非静态成员的规则,静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。即使是静态内部类的事例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。

    静态内部类是外部类的一个静态成员,因此外部类大的所有方法、所有初始化块中可以使用静态内部类来定义变量、创建对象等。

    外部类依然不能直接访问静态内部类的成员,但可以使用静态内部类的类名祖宗伟调用者来访问静态内部类的类成员,也可以使用静态内部类对象作为调用者来访问静态内部类的实例成员。

    接口里定义的内部类默认使用public static修饰,也就是说,接口内部类只能是静态内部类。

    如果为接口内部类指定访问控制符,则只能指定Public访问控制符;如果定义接口内部类时省略访问控制符,则该内部类默认是public访问控制符。

一、使用内部类

     1、在外部类内使用内部类

            不要在外部类的静态成员(包括静态方法和静态初始化块)中使用非静态内部类,因为静态成员不能访问非静态成员。

    2、在外部类以外使用费静态内部类

        如果希望在外部类以外的地方访问内部类(包括静态和非静态两种),则内部类不能使用private访问控制权限,private修饰的内部类智能在外部类内部使用。

        省略访问控制符的内部类,智能呗与外部类处于同一个包中的其他类所访问。

        使用proteced修饰的内部类,可被与外部类处于同一个包中的其他类和外部类的子类访问。

        class Out

{

//定义一个非静态内部类,不使用访问控制符,即同一个包中其他类可访问该内部类

class In

{

public In(String msg)

{

System.out.println(msg);

}

}

}

public class CreateInnerInstance

{

public static void main(String[] args)

{

    Out.In in = new Out().new In("测试信息");

    /*

    上面代码可改为如下三行代码:

    使用OutterClass.InnerClass的形式定义内部类变量

    Out.In in;

    创建外部类实例,非静态内部类实例将寄存在该实例中

    Out out = new Out();

    通过外部类实例和new来调用内部类构造器创建非静态内部类实例

    in = out.new In("测试信息");

    */

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 静态对象 静态对象的数据是全局唯一的,一改全改。 引用方便。直接用 类名. 静态方法名 或者 类名 . 静态变量名...
    Yanci516阅读 1,990评论 1 6
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,923评论 18 139
  • 众所周知,外部顶级类的类名需和类文件名相同,只能使用public和default。而内部类是指在外部类的内部再定义...
    奔跑吧李博阅读 18,041评论 12 58
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,765评论 18 399
  • 相恋如初怎忘怀,痴迷一生花不败。 陷入情的沼泽地,不知能否爬出来。
    老槐树阅读 275评论 0 2