java内部类

简介:

1.静态内部类

2.成员内部类

3.局部内部类

4.匿名内部类

 

内部类:

使用内部类减少了命名冲突。

一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。
内部类分为四种:
静态内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)

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

最简单的内部类。

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

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

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

1.1、相关使用例子:

静态内部类:

复制代码
复制代码
 1 class StaticInner{
 2     private static int a = 1;  3  4 /**  5    * 静态内部类  6    * 生成的类名:StaticInner$InnerClass  7   */  8 public static class InnerClass{  9 //静态内部类可以声明静态的成员变量,其他的内部类不可以 10 private static int b = 1; 11 public void execute(){ 12 //静态内部类只能访问静态程序 13 System.out.println(a + b); 14  } 15  } 16 }
复制代码
复制代码


main方法中使用:

  View Code


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

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

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

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

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

OuterClass.this.a;

2.1、相关使用例子:

成员内部类:

复制代码
复制代码
 1 class MemberInner{
 2     private int a = 1;  3  4 public void execute(){  5 //在外部类中创建成员内部类  6 InnerClass innerClass = this.new InnerClass();  7  }  8  9 /** 10  * 成员内部类 11 */ 12 public class InnerClass{ 13 14 //内部类可以创建与外部类同名的成员变量 15 private int a = 2; 16 17 public void execute(){ 18 //this引用的是内部类 19 System.out.println(this.a); 20 //在内部了中使用外部类的成员变量的方法 21 System.out.println(MemberInner.this.a); 22  } 23  } 24 }
复制代码
复制代码


在main方法中使用:

  View Code


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

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

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

3.1、相关使用例子:

局部内部类:

复制代码
复制代码
 1 class LocalInner{
 2 
 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"); 11 12 //局部内部类只能访问final类型的变量 13  System.out.println(a); 14  } 15  } 16 //只能在所在方法区域创建 17 new InnerClass().execute(); 18  } 19 }
复制代码
复制代码


在main方法中使用:

  View Code


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

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

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

4.1、相关使用例子:

复制代码
 1 public static void main(String[] args) {
 2 AnonymousInnerClassTest test = new AnonymousInnerClassTest();  3  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  }); 15 16 JButton button = new JButton(); 17 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 } 31 32 public void print(Date date){ 33  System.out.println(date); 34 }
复制代码
分类:  java

本文转自快乐就好博客园博客,原文链接:http://www.cnblogs.com/happyday56/p/4159516.html,如需转载请自行联系原作者
相关文章
|
2月前
|
Java
【Java基础面试二】、个Java文件里可以有多个类吗(不含内部类)?
这篇文章讨论了Java文件中类的定义规则,指出一个Java文件可以包含多个类(不包含内部类),但其中最多只能有一个public类,且如果有public类,它的名称必须与文件名一致。
|
2月前
|
算法 Java
12 Java常用类(一)(内部类+object类+包装类)
12 Java常用类(一)(内部类+object类+包装类)
29 5
|
3月前
|
Java
Java进阶之内部类
【7月更文挑战第13天】Java内部类增进代码组织与封装,允许直接访问外部类成员,包括私有成员。主要有四种类型:成员、静态、局部和匿名内部类。匿名内部类常用于一次性实现接口或扩展类。内部类可隐藏实现细节,减少命名冲突,并在特定上下文中定义辅助类。示例展示了静态和非静态内部类如何在Shape类中封装Circle和Rectangle。使用内部类能提升代码可读性,但可能增加复杂性。
34 6
|
2月前
|
Java
【Java】内部类、枚举、泛型
【Java】内部类、枚举、泛型
|
4月前
|
Java
一篇文章讲明白Java中内部类详解—匿名内部类
一篇文章讲明白Java中内部类详解—匿名内部类
54 2
|
4月前
|
设计模式 Java 编译器
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
Java中的内部类(如果想知道Java中有关内部类的知识点,那么只看这一篇就足够了!)
|
4月前
|
Java 编译器
24. 【Java教程】内部类
24. 【Java教程】内部类
25 2
|
5月前
|
Java 程序员
Java的内部类与匿名类的技术性文章
Java的内部类与匿名类的技术性文章
37 1
|
4月前
|
Java
Java内部类相关内容总结和解读
Java内部类相关内容总结和解读
28 0
|
4月前
|
存储 Java
Java 五种内部类演示及底层原理详解
Java 五种内部类演示及底层原理详解
27 0
下一篇
无影云桌面