一、在外部类内部使用内部类
对于非静态内部类,不能在外部类的静态成员(静态方法、静态初始化块)中使用。
对于静态内部类,可以在任何成员(静态方法、实例方法、静态初始化块、普通初始化块)中使用。
二、在外部类以外使用非静态内部类
如果希望在外部类以外的地方访问内部类,则内部类不能使用private访问权限控制,private修饰的内部类只能在外部类内部使用。对于使用其他访问控制符修饰的内部类,则能在访问控制符对应的访问权限内使用。
package org.lgy.study.innerclass; public class Out{ /* 如果希望在外部类以外的地方访问内部类(包括静态和非静态),则内部类不能使用private访问权限控制, private修饰的内部类只能在外部类内部使用。 对于使用其他访问控制符修饰的内部类,则能在访问控制符对应的访问权限内使用。 */ public class In{ public In(String msg){ System.out.println(msg); } public void method1(){ System.out.println("********"); } } }
package org.lgy.study.main; import org.lgy.study.innerclass.Out; public class InnerClassMain{ public static void main(String[] args){ //在外部类以外的地方定义内部类变量的语法格式为:OuterClass.InnerClass varName; Out.In in = null; //因为非静态内部类的对象必须寄存在外部类的对象里,因此创建非静态内部类对象之前, //必须先创建其外部类对象。并且必须使用外部类对象来调用内部类的构造器。 //下面一行代码将创建一个外部类对象,之后创建的内部类对象将寄存在该外部类对象中 Out out = new Out(); //用过外部类实例和new来调用内部类构造器创建非静态内部类实例 in = out.new In("create inner class Out.In"); in.method1(); Out.In in1 = new Out().new In("create another inner class Out.In"); in1.method1(); } }
三、在外部类以外使用静态内部类
package org.lgy.study.innerclass; public class StaticOut{ /* 如果希望在外部类以外的地方访问内部类(包括静态和非静态),则内部类不能使用private访问权限控制, private修饰的内部类只能在外部类内部使用。 对于使用其他访问控制符修饰的内部类,则能在访问控制符对应的访问权限内使用。 */ public static class StaticIn{ public StaticIn(String msg){ System.out.println(msg); } public void method1(){ System.out.println("*******"); } } }
package org.lgy.study.main; import org.lgy.study.innerclass.StaticOut; public class InnerClassMain{ public static void main(String[] args){ //在外部类以外的地方定义内部类变量的语法格式为:OuterClass.InnerClass varName; StaticOut.StaticIn in = null; //因为静态内部类属于外部类,所以创建内部类对象时必须使用外部类来调用构造器 in = new StaticOut.StaticIn("create inner class StaticOut.StaticIn"); in.method1(); StaticOut.StaticIn in2 = new StaticOut.StaticIn("create another inner class StaticOut.StaticIn"); in2.method1(); } }
相关推荐
Java内部类是Java语言提供的一种独特机制,它允许在一个类的内部定义另一个类。这种设计模式使得代码结构更紧凑,可以更好地封装和隐藏...理解并熟练掌握内部类的使用,能够帮助开发者编写更加灵活、高效的Java代码。
4. 匿名内部类:匿名内部类是指没有名字的内部类,通常用在创建实例时使用。 为什么需要内部类? 内部类提供了某种进入其外围类的窗口。使用内部类最吸引人的原因是,每个内部类都能独立地继承自一个(接口的)...
当只需要一次性使用一个类,并且这个类只需要实现一两个方法时,匿名内部类是一个很好的选择。它可以用于事件监听、回调函数等场景。 5. **StringBuffer reverse的使用**: `StringBuffer` 是线程安全的字符串操作...
本文将深入探讨内部类的使用,包括其分类、特点以及如何与外部类进行交互。同时,我们还将触及Java中的Stream API,这是一种现代化的数据处理方式,特别适用于集合操作。 首先,内部类分为四种类型:成员内部类、...
Java语言中的静态内部类,也称为嵌套类,是内部类的一种特殊形式,它与非静态内部类(也称为成员内部类)相比有着独特的特点和使用场景。在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不...
文章目录Java内部类:你真得了解方法内部类吗?普通内部类方法内部类匿名内部类静态内部类参考Thinking in Java Java内部类:你真得了解方法内部类吗? java内部类,相信很多人都使用过内部类,新建线程使用的匿名...
1. 成员内部类: 成员内部类是定义在一个类的成员位置的类,它就像是类的一个普通成员变量或方法。成员内部类可以直接访问外部类的所有成员,包括私有成员,因为它们之间有隐式的引用关系。 2. 局部内部类: 局部...
在使用匿名内部类时,要记住以下几个原则:匿名内部类不能有构造方法、匿名内部类不能是public、protected、private、static、只能创建匿名内部类的一个实例、匿名内部类不能定义任何静态成员、静态方法、一个匿名...
本篇文章将深入探讨Java中的四种内部类:实例内部类、局部内部类、匿名类和静态内部类,并通过实例代码进行详细解析。 1. **实例内部类**:这是最常见的内部类形式,它在外部类的实例方法或成员位置定义。实例内部...
本篇文章将深入探讨Java匿名内部类的使用规范,帮助你更好地理解和应用这一特性。 首先,理解匿名内部类的基本概念。匿名内部类没有名字,它不能被其他类直接引用,但可以作为局部变量、成员变量或者方法参数。它...
4. **匿名内部类**: 没有名字的内部类,通常用在只需要一次使用的场合,简化代码。 **匿名内部类** 匿名内部类是一种没有名字的内部类,它常用于实现接口或者继承一个类,并且只需要一次使用的情况。其基本语法...
本文将详细探讨内部类、匿名内部类以及内部接口的对比和使用。 首先,让我们了解一下内部类的基本概念。内部类定义在其他类的内部,编译后会生成两个独立的类文件。内部类能够自由地访问外部类的所有成员,包括私有...
3. 匿名内部类:没有名字的内部类,通常用作接口的匿名实现或创建一次性使用的类。 4. 静态内部类:与成员内部类类似,但可以独立于外部类实例存在,且不隐式持有外部类的引用。 内部类可以访问外部类的所有成员,...
1. 成员内部类:这是最常见的内部类形式,它作为外部类的一个成员存在,可以在外部类的任何地方被定义。成员内部类可以访问外部类的所有成员,包括私有成员。 2. 局部内部类:局部内部类定义在方法或块的内部,其...
1. 成员内部类:即在一个类中直接定义的内部类,成员内部类与普通的成员没什么区别,可以与普通成员一样进行修饰和限制。成员内部类不能含有 static 的变量和方法。 2. 局部内部类:即在一个方法中定义的内部类,...
这种内部类可以是成员内部类、局部内部类、匿名内部类或静态内部类,每种都有其特定的用途和使用场景。在这个"java内部类使用例子"中,我们将深入探讨这些类型,并通过实际代码来理解它们的工作原理。 首先,成员...
首先,我们有四种类型的内部类:成员内部类、局部内部类、匿名内部类和静态内部类。 1. 成员内部类:这种类型的内部类与外部类的成员变量地位相同,可以在任何地方声明,可以访问外部类的所有成员。例如: ```java...
1. 成员内部类:这是最常见的内部类形式,它作为外部类的一个成员,可以在外部类的任何地方声明。成员内部类可以访问外部类的所有成员,包括私有成员。 2. 局部内部类:定义在方法、构造器或块中的类,它的作用域仅...
1. 成员内部类:这类内部类就像外部类的成员,可以访问外部类的所有成员,包括私有成员。它们可以有自己的修饰符,但不能是`static`。创建成员内部类的对象需要通过外部类的对象来完成,如`Outer.Inner inner = ...
- 静态内部类:使用static修饰,不需要依赖外部类的实例即可创建。 2. 内部类的访问规则 内部类可以访问外部类的成员变量和方法,但是外部类访问内部类的成员变量和方法,需要通过内部类的实例进行。内部类持有外部...