“全栈2019”Java第七十二章:静态内部类访问外部类成员

275 阅读6分钟
原文链接: www.toutiao.com

难度

初级

学习时间

30分钟

适合人群

零基础

开发语言

Java

开发环境

  • JDK v11
  • IntelliJ IDEA v2018.3

提示

本教学属于系列教学,内容具有连贯性,本章使用到的内容之前教学中都有详细讲解。

1.静态内部类访问外部类中的实例变量

演示:

请创建一个外部类Outer,在外部类Outer里面创建一个静态内部类Inner。

在外部类Outer中定义实例变量。

试试在静态内部类构造方法中访问外部类成员。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

Main类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

结果:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

错误信息:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

文字版:

/Users/admin/Workspace/Java/Hello/src/lab/Outer.javaError:(37, 58) java: 无法从静态上下文中引用非静态 变量 anIntError:(38, 61) java: 无法从静态上下文中引用非静态 变量 aFloatError:(39, 59) java: 无法从静态上下文中引用非静态 变量 aBooleanError:(40, 58) java: 无法从静态上下文中引用非静态 变量 str

在本例中,外部类Outer里定义了四种不同类型和访问权限的成员,访问权限分别为private,public,protected或package private的都可以访问,然后在静态内部类里面去访问外部类非静态成员时,发生错误。

请注意:

静态内部类不能直接访问外部类中非静态成员。

上例中,我们静态内部类直接访问了外部类中的实例变量,这是不可以的。

2.静态内部类访问外部类中的实例方法

静态内部类不能直接访问外部类中非静态成员。

所以,静态内部类不能直接访问外部类中的实例方法。

3.静态内部类访问外部类中的常量

静态内部类不能直接访问外部类中非静态成员。

所以,静态内部类不能直接访问外部类中的常量。

4.静态内部类访问外部类中的最终方法

静态内部类不能直接访问外部类中非静态成员。

所以,静态内部类不能直接访问外部类中的最终方法。

5.静态内部类访问外部类中的类变量

演示:

请创建一个外部类Outer,在外部类Outer里面创建一个静态内部类Inner。

在外部类Outer中定义类变量。

试试在静态内部类构造方法中访问外部类成员。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

Main类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

结果:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

在本例中,外部类Outer里定义了四种不同类型和访问权限的成员,访问权限分别为private,public,protected或package private的都可以访问,然后在静态内部类里面去访问外部类静态成员,这是可以的。

6.外部类访问静态内部类中的类方法

演示:

请创建一个外部类Outer,在外部类Outer里面创建一个静态内部类Inner。

在外部类Outer中定义类类方法。

试试在静态内部类构造方法中访问外部类成员。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

Main类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

结果:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

在本例中,外部类Outer里定义了四种不同类型和访问权限的成员,访问权限分别为private,public,protected或package private的都可以访问,然后在静态内部类里面去访问外部类静态成员,这是可以的。

7.外部类访问静态内部类中的静态常量

演示:

请创建一个外部类Outer,在外部类Outer里面创建一个静态内部类Inner。

在外部类Outer中定义静态常量。

试试在静态内部类构造方法中访问外部类成员。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

Main类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

结果:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

在本例中,外部类Outer里定义了四种不同类型和访问权限的成员,访问权限分别为private,public,protected或package private的都可以访问,然后在静态内部类里面去访问外部类静态成员,这是可以的。

8.静态内部类访问外部类中的静态最终方法

演示:

请创建一个外部类Outer,在外部类Outer里面创建一个静态内部类Inner。

在外部类Outer中定义类静态最终方法。

试试在静态内部类构造方法中访问外部类成员。

请观察程序运行结果。

代码:

Outer类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

Main类:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

结果:

“全栈2019”Java第七十二章:静态内部类访问外部类成员

在本例中,外部类Outer里定义了四种不同类型和访问权限的成员,访问权限分别为private,public,protected或package private的都可以访问,然后在静态内部类里面去访问外部类静态成员,这是可以的。

总结

  • 在Java中,我们可以在一个类中再定义一个类,这样称之为内部类。
  • 内部类又称之为嵌套类。
  • 内部类分为两类:静态和非静态。 声明为static的内部类称为静态内部类。 非静态内部类称为内部类。
  • 要实例化内部类,必须首先实例化外部类。
  • 内部类中的实例变量。可以通过外部类中内部类对象访问,外界内部类对象只能访问public修饰的。
  • 内部类中的实例方法。可以通过外部类中内部类对象访问,外界内部类对象只能访问public修饰的。
  • 内部类中的常量。可以通过外部类中内部类对象访问,外界内部类对象只能访问public修饰的。
  • 内部类中的最终方法。可以通过外部类中内部类对象访问,外界内部类对象只能访问public修饰的。
  • 内部类中的类变量。内部类不可以定义任何类变量。
  • 内部类中的类方法。内部类不可以定义任何类方法。
  • 内部类中的静态常量。可以通过外部类中内部类对象访问,外界内部类对象只能访问public修饰的。
  • 内部类中的静态最终方法。内部类不可以定义任何静态最终方法。
  • 静态内部类不能直接访问外部类非静态成员。

至此,Java中静态内部类访问外部类成员相关内容讲解先告一段落,更多内容请持续关注。

答疑

如果大家有问题或想了解更多前沿技术,请在下方留言或评论,我会为大家解答。

上一章

“全栈2019”Java第七十一章:外部类访问静态内部类成员详解

下一章

“全栈2019”Java第七十三章:外部类里多个内部类、静态内部类详解

学习小组

加入同步学习小组,共同交流与进步。

  • 方式一:关注头条号Gorhaf,私信“Java学习小组”。
  • 方式二:关注公众号Gorhaf,回复“Java学习小组”。

全栈工程师学习计划

关注我们,加入“全栈工程师学习计划”。

“全栈2019”Java第七十二章:静态内部类访问外部类成员

版权声明

原创不易,未经允许不得转载!