Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)

简介:

Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。

内部类的主要作用:使用内部类可以减少命名冲突。

定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中。

广义上讲,内部类分为四种:

静态内部类(static inner classes)

成员内部类(member inner classes)

局部内部类(local inner classes)

匿名内部类(anonymous inner classes)

 

1、静态内部类(static inner classes)

最简单的内部类。

只能访问外部类的静态成员变量与静态方法。

生成静态内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

相关使用例子:静态内部类

复制代码
 1 class StaticInner{

 2     private static int a = 1;

 3     /**

 4    * 静态内部类

 5    * 生成的类名:StaticInner$InnerClass

 6    */

 7     public static class InnerClass{

 8         //静态内部类可以声明静态的成员变量,其他的内部类不可以

 9         private static int b = 1;

10         public void execute(){

11             //静态内部类只能访问静态程序

12             System.out.println(a + b);

13         }

14     }

15 }

//main方法中使用:

16 public static void main(String[] args) {

17     //创建静态内部类

18     StaticInner.InnerClass innerClass = new StaticInner.InnerClass();

19     innerClass.execute();

20 }
复制代码

 

2、成员内部类(member inner classes):

成员内部类可以访问外部类的静态与非静态的方法和成员变量。

生成成员内部类对象的方法:

OuterClass.InnerClass inner = new OuterClass().new InnerClass();

在局部内部类中访问外部类的成员变量的方法:

OuterClass.this.a;

 相关使用例子:成员内部类

复制代码
 1 class MemberInner{

 2     private int a = 1;

 4     public void execute(){

 5         //在外部类中创建成员内部类

 6         InnerClass innerClass = this.new InnerClass();

 7     }

 9     /**

10  * 成员内部类

11  */

12     public class InnerClass{

14         //内部类可以创建与外部类同名的成员变量

15         private int a = 2; 

17         public void execute(){

18             //this引用的是内部类

19              System.out.println(this.a);

20             //在内部了中使用外部类的成员变量的方法

21             System.out.println(MemberInner.this.a);

22         }

23     }

24 }

//在main方法中使用:

1 public static void main(String[] args) {

2     //创建成员内部类

3     MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();

4     innerClass.execute();

5 }
复制代码

 

3、局部内部类(local inner classes):

类似于局部变量,不能定义为public,protected,private或者static类型。

定义方法中,只能方法中声明为final类型的变量。

相关使用例子:局部内部类

复制代码
 1 class LocalInner{

 3     public void execute(){

 4         final int a = 1;

 5      /**

 6      创建局部内部类

 7      */

 8         class InnerClass{

 9             public void execute(){

10                 System.out.println("LocalInner Class”);

12                 //局部内部类只能访问final类型的变量

13                 System.out.println(a);

14             }

15         }

16         //只能在所在方法区域创建

17         new InnerClass().execute();

18     }

19 }

//在main方法中使用:

1 public static void main(String[] args) {

2     //外部不能直接创建局部内部类

3     LocalInner localInner = new LocalInner();

4     localInner.execute();

5 }
复制代码

 

4、匿名内部类(anonymous inner classes):

匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。

匿名内部类会隐式地继承一个父类或实现一个接口。

相关使用例子:匿名内部类

复制代码
 1 public static void main(String[] args) {

 2     AnonymousInnerClassTest test = new AnonymousInnerClassTest();

 4     /**

 5  * 创建匿名内部类

 6  * 生成的类名:AnonymousInnerClassTest$1

 7  */

 8     test.print(new Date(){

 9         //重写toString()方法

10         @Override

11         public String toString() {

12             return "Hello world.";

13         }

14     });

16     JButton button = new JButton();

18     /**

19  * 创建匿名内部类

20  * 该匿名内部类实现ActionListener接口

21  * 生成的类名:AnonymousInnerClassTest$1

22  */

23     button.addActionListener(new ActionListener(){

24         //实现接口中的方法

25         @Override

26         public void actionPerformed(ActionEvent e) {

27             System.out.println("使用匿名内部类实现ActionListener接口");

28         }

29     });

30 }

32 public void print(Date date){

33     System.out.println(date);

34 }
复制代码

 

程序猿神奇的手,每时每刻,这双手都在改变着世界的交互方式!
本文转自当天真遇到现实博客园博客,原文链接:http://www.cnblogs.com/XYQ-208910/p/4915287.html ,如需转载请自行联系原作者
相关文章
|
2月前
|
Java
java中,剩下的这两个内部类不太好理解!
java中,剩下的这两个内部类不太好理解!
14 0
|
2月前
|
Java 编译器
java中常见的几种内部类,你会几个?(未完)
java中常见的几种内部类,你会几个?(未完)
14 1
|
24天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
38 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
26天前
|
Java API
Java基础—笔记—内部类、枚举、泛型篇
本文介绍了Java编程中的内部类、枚举和泛型概念。匿名内部类用于简化类的创建,常作为方法参数,其原理是生成一个隐含的子类。枚举用于表示有限的固定数量的值,常用于系统配置或switch语句中。泛型则用来在编译时增强类型安全性,接收特定数据类型,包括泛型类、泛型接口和泛型方法。
11 0
|
26天前
|
存储 Java
java接口和内部类
java接口和内部类
|
2月前
|
Java 程序员 C#
静态构造方法解析,Java新手必看技能
静态构造方法解析,Java新手必看技能
12 0
|
2月前
|
Java 编译器
详解java各种内部类
详解java各种内部类
|
2月前
|
设计模式 Java
JAVA内部类
JAVA内部类
11 1
|
3月前
|
Java
JAVA基础--内部类和静态内部类、单例模式---静态内部类剖析
JAVA--内部类和静态内部类、单例模式---静态内部类剖析
|
4月前
|
安全 Java
Java中的静态同步方法
Java中的静态同步方法
16 0