Java:内部类(静态内部类、成员内部类、局部内部类、匿名内部类)
2015-10-27 19:20
666 查看
Java基础_内部类:在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。
内部类的主要作用:使用内部类可以减少命名冲突。
定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中。
广义上讲,内部类分为四种:
静态内部类(static inner classes)
成员内部类(member inner classes)
局部内部类(local inner classes)
匿名内部类(anonymous inner classes)
1、静态内部类(static inner classes)
最简单的内部类。
只能访问外部类的静态成员变量与静态方法。
生成静态内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass.InnerClass();
相关使用例子:静态内部类
2、成员内部类(member inner classes):
成员内部类可以访问外部类的静态与非静态的方法和成员变量。
生成成员内部类对象的方法:
OuterClass.InnerClass inner = new OuterClass().new InnerClass();
在局部内部类中访问外部类的成员变量的方法:
OuterClass.this.a;
相关使用例子:成员内部类
3、局部内部类(local inner classes):
类似于局部变量,不能定义为public,protected,private或者static类型。
定义方法中,只能方法中声明为final类型的变量。
相关使用例子:局部内部类
4、匿名内部类(anonymous inner classes):
匿名内部类没有类名,没有class关键字也没有extends和implements等关键字修饰。
匿名内部类会隐式地继承一个父类或实现一个接口。
相关使用例子:匿名内部类
内部类的主要作用:使用内部类可以减少命名冲突。
定义位置:一个内部类可以定义在一个类中,也可以在一个方法中,甚至在一个表达式中。
广义上讲,内部类分为四种:
静态内部类(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 }
相关文章推荐
- Spring注解注入
- java集合类(容器)
- Java学习日记 I/O
- Java学习日记 集合
- Struts核心文件
- Struts2框架提供的result结果类型
- Java中String类详解
- java学习一目了然——异常必知
- java中的抽象类与接口
- 利用java反射分析类的能力
- java基础 - 位移
- Java内存管理:深入Java内存区域
- JAVA 内存管理总结
- 苹果私有api------SpringBoard
- Java WebService入门实例
- struts2表单提单细节处理
- Java基础学习11(小知识点:一维二维数组的写法)
- Java线程:概念与原理
- Java开发中IO流介绍
- java应用程序利用Exe4j打包成exe文件