JAVA学习:成员内部类基本概念及用法

简介:

简单的说,内部类就是将一个类的定义放到另一个类的定义内部。内部类分为:成员内部类、局部内部类、静态内部类、匿名内部类。

  成员内部类:作为外部类的一个成员存在,与外部类的属性、方法并列。

  优点:一方面,内部类作为外部类的成员,可以访问外部类的私有成员或属性。(即使声明为private,但是对于处于其内部的内部类还是可见的。)另一方面,可以内部类定义在外部类不可访问的属性。这样就在外部类中实现了比外部类private还要小的额访问权限。

  注意:

  内部类是一个编译时的概念,一旦编译成功,就会成为完全不同的两个类。

  对于一个名为Outer的外部类和其内部定义的名为Inner的内部类。编译完成后出现Outer.class 和 Outer$Inner.class 两个类

  当Outer是一个private类时,外部类对于其外部访问是私有的,所以就无法建立外部类对象,进而也无法建立内部类对象。

  局部内部类

  在方法中第一的内部类称为局部内部类。

  与局部变量类似,在局部内部类前不加修饰符public和private,其范围为定义它的代码块

  注意:

  在类外不可直接生产局部内部类(保证局部内部类对外是不可见的)。

  要想使用局部内部类时需要生产对象,对象调用方法,在方法中才能调用局部内部类。

  通过内部类和接口达到一个强制的弱耦合,用局部内部类来实现接口,并在方法中返回接口类型,使局部内部类不可见,屏蔽实现类的可见性。

  静态内部类

  静态内部类可以使用public,protected,private修饰

  静态内部类中可以定义静态和非静态的成员

  注意:

  一个静态内部类不需要一个外部类的成员:只是静态内部类和成员内部类的区别。静态内部类的对象可以直接生成

  这实际上静态内部类成为了一个顶级类。

  静态内部类不可用private来进行定义。

  当类与接口(或者是接口与接口)发生方法命名冲突的时候,此时必须使用内部类来实现。用接口不能完全地实现多继承,用接口配合内部类才能实现真正的多继承。

  匿名内部类

  匿名内部类就是没有名字的内部类。

  注意:

  匿名内部类不能有构造函数

  匿名内部类不能定义任何静态成员、方法和类

  匿名内部类不能是public、protected、private、static

  只能创建匿名内部类的一个实例

  一个匿名内部类用其隐含实现一个接口或实现一个类。

  因匿名内部类为局部内部类,所以局部内部类的所有限制都对其生效。

本文出自seven的测试人生公众号最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
继承与隐藏:Java中父类成员变量的神秘禁忌
本文将解释为什么Java设计了这样的规则,探讨与此相关的继承和多态的概念,并说明如何在子类中访问和使用父类的成员变量。
|
3月前
|
Java 调度 开发者
Java 神秘新成员 —— 虚拟线程究竟是什么?它又能解开哪些编程痛点之谜?
【8月更文挑战第23天】Java虚拟线程是一种轻量级执行线程,由Java运行时管理,相较于传统操作系统线程,其创建和管理成本更低。基于用户模式线程概念,Java应用程序无需依赖OS即可实现高度并发。虚拟线程数量可远超传统线程,有效提升多核处理器利用率和并发性能。它解决了传统Java线程模型中创建成本高、调度开销大及I/O阻塞等问题,极大提高了程序的并发性和响应速度。
35 1
|
4月前
|
Java 程序员
【Java探索之旅】继承概念_语法_父类的成员访问
【Java探索之旅】继承概念_语法_父类的成员访问
55 10
|
5月前
|
Java
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
在 Java 中,类是一种定义对象的模板,它包含数据成员(字段)和方法。
|
6月前
|
Java
【JAVA学习之路 | 基础篇】类的成员--代码块
【JAVA学习之路 | 基础篇】类的成员--代码块
|
5月前
|
安全 Java
比较java枚举成员使用equal还是==
比较java枚举成员使用equal还是==
113 0
|
存储 Java 数据库
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(中)
63 1
|
6月前
|
Java
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
【Java基础】类名、抽象类、接口名的参数传递及成员内部类、局部内部类和匿名内部类的使用
76 0
|
Java 编译器
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
63 1
Java-对象的操作(构造、初始化、封装)、static成员以及代码块(上)
|
存储 Java
Java内部类 - 局部/匿名/成员/静态内部类
Java内部类 - 局部/匿名/成员/静态内部类
92 0