博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java基础_内部类、静态内部类、成员内部类、局部内部类、匿名内部类 (转)...
阅读量:5807 次
发布时间:2019-06-18

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

From: http://www.itzhai.com/java-based-notebook-a-static-inner-class-within-a-class-member-within-the-class-of-local-inner-classes-anonymous-inner-classes.html

内部类:
使用内部类减少了命名冲突。
一个内部类可以定义在一个类中,一个方法中甚至一个表达式中。
内部类分为四种:
静态内部类(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 }
View Code

main方法中使用:

1 public static void main(String[] args) {2     //创建静态内部类3     StaticInner.InnerClass innerClass = new StaticInner.InnerClass();4     innerClass.execute();5 }
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 }
View Code

在main方法中使用:

1 public static void main(String[] args) {2     //创建成员内部类3     MemberInner.InnerClass innerClass = new MemberInner().new InnerClass();4     innerClass.execute();5 }
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 }
View Code

在main方法中使用:

1 public static void main(String[] args) {2     //外部不能直接创建局部内部类3     LocalInner localInner = new LocalInner();4     localInner.execute();5 }
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         @Override11         public String toString() {12             return "Hello world.";13         }14     });15 16     JButton button = new JButton();17 18     /**19  * 创建匿名内部类20  * 该匿名内部类实现ActionListener接口21  * 生成的类名:AnonymousInnerClassTest$122  */23     button.addActionListener(new ActionListener(){24         //实现接口中的方法25         @Override26         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 }
View Code

 

转载于:https://www.cnblogs.com/nliao/p/3308690.html

你可能感兴趣的文章
vrpie在Visio Studio 中无法调试的问题
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
关于Css选择器优先级
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
hive基本操作与应用
查看>>
excel快捷键设置
查看>>
poj3692
查看>>
python之信号量【Semaphore】
查看>>
html5纲要,细谈HTML 5新增的元素
查看>>
Android应用集成支付宝接口的简化
查看>>
[分享]Ubuntu12.04安装基础教程(图文)
查看>>
[Vim] 搜索模式(正则表达式)
查看>>
#HTTP协议学习# (二)基本认证
查看>>