package org.lgy.study.innerclass; /* 静态内部类属于外部类本身,而不属于外部类的对象。 使用静态内部类时无需创建外部类的对象。 */ public class StaticInnerClass{ private String str1 = "non static str1 in outer"; private static String str2 = "static str2 in outer"; public void method1(){ System.out.println("non static method1 in outer"); //外部类的实例方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。 //即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员, //必须使用静态内部类对象作为调用者来访问其实例成员。 InnerClass in = new InnerClass(); System.out.println("in.str1 = " + in.str1); System.out.println("InnerClass.str2 = " + InnerClass.str2); in.method1(); InnerClass.method2(); } public static void method2(){ System.out.println("static method2 in outer"); //外部类的类方法可以访问静态内部类的任何成员,无论该成员是静态成员还是非静态成员。 //即使是内部类的私有属性,也可以在外部类中直接访问;但必须使用类名作为调用者来访问其类成员, //必须使用静态内部类对象作为调用者来访问其实例成员。 InnerClass in = new InnerClass(); System.out.println("in.str1 = " + in.str1); System.out.println("InnerClass.str2 = " + InnerClass.str2); in.method1(); InnerClass.method2(); } public void method3(){ System.out.println("non static method3 in outer"); } public static void method4(){ System.out.println("static method4 in outer"); } /* 静态内部类不能访问外部类的实例成员,只能访问外部类的类成员。 即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员。 */ private static class InnerClass{ //静态内部类里可以定义任何成员(成员变量、成员方法、静态成员、非静态成员) private String str1 = "non static str1 in inner"; private static String str2 = "static str2 in inner"; public void method1(){ System.out.println("non static method1 in inner"); //静态内部类的实例方法也不能访问外部类的实例成员变量 //System.out.println("str1 in outer: " + StaticInnerClass.this.str1); System.out.println("str2 in outer: " + str2); //静态内部类的实例方法也不能访问外部类的实例成员方法 //method3(); method4(); } public static void method2(){ System.out.println("static method2 in inner"); //静态内部类的静态方法也不能访问外部类的实例成员变量 //System.out.println("str1 in outer: " + StaticInnerClass.this.str1); System.out.println("str2 in outer: " + str2); //静态内部类的静态方法也不能访问外部类的实例成员变量 //method3(); method4(); } } }
相关推荐
3. 静态内部类:静态内部类是指在外部类的静态成员中定义的内部类。 4. 匿名内部类:匿名内部类是指没有名字的内部类,通常用在创建实例时使用。 为什么需要内部类? 内部类提供了某种进入其外围类的窗口。使用...
静态内部类与成员内部类类似,但可以在没有外部类实例的情况下创建。由于它们不持有对外部类的引用,所以它们可以访问外部类的静态成员。 5. 接口的内部类: Java允许在接口内部定义类,这样的类必须是静态的,...
3. 静态内部类:静态内部类不持有对外部类的引用,因此它可以像普通类一样实例化,无需外部类的对象。静态内部类可以声明为静态成员,且可以有自己的静态变量和静态方法。 4. 匿名内部类:没有名字的内部类,通常...
4. 静态内部类:静态内部类与普通成员内部类的区别在于,静态内部类可以不依赖于外部类的实例就能创建对象。它们不持有对外部类的引用,所以可以声明静态成员。此外,静态内部类可以被其他类直接引用,而无需先创建...
内部类可以分为四种类型:静态内部类、成员内部类(非静态内部类)、局部内部类和匿名内部类。 1. **静态内部类**: 静态内部类与普通的成员内部类不同,它不持有对外部类的引用。因此,可以像其他静态成员一样,...
内部类可以分为四类:成员内部类、局部内部类、匿名内部类和静态内部类。在这里,我们重点关注成员内部类和静态内部类。 成员内部类,就像它的名字一样,是类的一个成员,与字段和方法处于同一级别。它可以访问外部...
4. 静态内部类:静态内部类与普通成员内部类相似,但可以通过外部类直接实例化,不依赖外部类的对象。它们不能直接访问外部类的非静态成员,但可以通过实例化外部类对象来访问。 二、内部类的用途 1. 数据封装:...
内部类分为四种主要类型:成员内部类、局部内部类、静态内部类和匿名内部类。每种类型的内部类都有其特定的使用场景和优势。 1. 成员内部类: 成员内部类作为外部类的成员,与外部类的字段和方法并列存在。成员...
### 静态内部类详解 #### 一、静态内部类概述 静态内部类(Static Inner Class)是在Java中一种特殊的内部类实现形式。在Java编程语言中,内部类允许在一个类的内部定义另一个类。根据内部类是否声明为static,...
内部类分为四种主要类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类就像是外部类的一个成员,它可以访问外部类的所有成员,包括私有成员。例如,在`Outer`类中定义的`Inner`...
内部类主要有四种类型:成员内部类、静态内部类、局部内部类和匿名内部类。 1. 成员内部类: 成员内部类可以直接访问外部类的所有成员,包括实例变量和方法。它定义的位置是在类中,但不在任何方法之内。成员内部...
然而,静态内部类不能直接访问外围类的非静态成员,需要通过new 外部类().成员的方式访问。如果与外部类的静态成员同名,可以通过类名.静态成员来区分。创建静态内部类的对象时,可以直接使用:内部类 对象名 = new ...
内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态嵌套类。其中,静态嵌套类是与外部类关联但不持有对外部类的引用,因此它可以像普通类一样被静态引用,而无需外部类实例。 Java的静态嵌套类通常用于...
内部类在Java中扮演着多种角色,包括匿名内部类、成员内部类、局部内部类以及静态内部类等,它们提供了更灵活的封装和抽象能力。 首先,我们来理解什么是内部类。内部类是定义在一个外部类(也称为包含类)内部的类...
### Java静态内部类(嵌套类)详解 #### 一、静态内部类概念与特性 在Java编程语言中,静态内部类(也被称为嵌套类)是一种特殊的内部类形式,它通过`static`关键字来定义。与普通内部类相比,静态内部类具有以下...
4. 静态内部类:静态内部类不持有对外部类的引用,因此可以独立创建对象,不需要外部类的实例。它类似于普通的顶级类,但依然保留在外部类的命名空间内。 内部类的访问控制与外部类类似,可以有public、protected、...
Java语言中的静态内部类,也称为嵌套类,是内部类的一种特殊形式,它与非静态内部类(也称为成员内部类)相比有着独特的特点和使用场景。在深入探讨其使用规范之前,我们先理解静态内部类的基本概念。 静态内部类不...
### Java 利用反射获取内部类静态成员变量的值操作 #### 一、引言 在Java编程中,反射是一个非常强大的工具,它允许程序在运行时检查类、接口、字段和方法的信息,并且能够创建和操作对象。本文将详细介绍如何使用...
内部类分为几种类型,包括成员内部类、局部内部类、匿名内部类以及静态内部类。 1. 成员内部类(Outer.java示例): 成员内部类如同其他成员变量一样,可以在类的任何地方定义,可以访问外部类的所有成员,包括...
有两种类型的内部类:静态内部类和非静态(成员)内部类。在例子中,`Teacher`是一个静态内部类,可以直接通过`School.Teacher`创建对象,而无需先创建外部类`School`的实例。非静态内部类(如`Student`)需要外部类...