博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java内部类
阅读量:6547 次
发布时间:2019-06-24

本文共 2561 字,大约阅读时间需要 8 分钟。

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 }

转载地址:http://wgedo.baihongyu.com/

你可能感兴趣的文章
作业第六次
查看>>
构建之法 第一章 概论
查看>>
Hadoop编译安装
查看>>
汇编字符串拷贝
查看>>
Lambda的前世今生
查看>>
黑马程序员-张老师基础加强3-内省
查看>>
TCP/IP模型简介和/etc/hosts文件说明
查看>>
UIButton常用属性
查看>>
主键自增归0
查看>>
杨辉三角
查看>>
mysql之 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
查看>>
如何批量修改文件后缀的方法
查看>>
Effective STL 笔记
查看>>
[LeetCode] 1. Two Sum
查看>>
超时时间已到。在操作完成之前超时时间已过或服务器未响应。 (.Net SqlClient Data Provider)(转)...
查看>>
POJ2538 ZOJ1884 UVA10082 WERTYU【输入输出】
查看>>
HDU5620 KK's Steel(C++语言版)
查看>>
旋转卡壳
查看>>
2016/10/09
查看>>
自定义HorizontalScrollView的scrollBar
查看>>