博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA普通内部类的用法
阅读量:4980 次
发布时间:2019-06-12

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

  内部类顾名思义就是定义在一个类的内部

  内部类又有普通内部类、方法和域内的内部类、匿名内部类、嵌套内部类

普通内部类的基础用法

1 class MyClass{ 2     class InnerClass1{ 3         public InnerClass1() { 4             System.out.println("InnerClass1 created.."); 5         } 6     } 7     class InnerClass2{ 8         public InnerClass2() { 9             System.out.println("InnerClass2 created..");10         }11     }12     void getInnerClass() {13         new InnerClass1();14         new InnerClass2();15     }16     public static void main(String[] args) {17         new MyClass().getInnerClass();18     }19 } //输出:
InnerClass1 created..
InnerClass2 created..

上图就是一个普通内部类的例子,同时内部类自动拥有对其外围类所有成员的访问权。

main方法中获得内部类的实例需要借助其他方法,因为main方法是static的。

如果想要直接生成对外部类对象和内部类对象的引用,就需要借助.this和.new关键字。

.this关键字

 

1 class MyClass{ 2     class InnerClass{ 3         public InnerClass() { 4             System.out.println("InnerClass created.."); 5         } 6         MyClass getMyClass() { 7             System.out.println("getMyClass.."); 8             return MyClass.this; 9         }10     }11     12     InnerClass getInner() {13         return new InnerClass();14     }15     public static void main(String[] args) {16         MyClass mc=new MyClass();17         MyClass.InnerClass mic=mc.getInner();18         MyClass mc2=mic.getMyClass();19     }20 }

 

上例代码第8行,内部类通过.this关键字返回了一个MyClass对象。

.new关键字

 

 上述普通内部类的第一个例子,我们得到一个内部类的对象是通过一个void方法。如果想要在main方法中直接获得实例可用

MyClass.InnerClass mic=new MyClass().new InnerClass();

 内部类向上转型

内部类向上转型为一个接口时,内部类可以很好的隐藏起来。

1 interface MyInterface{ 2     int getValue(); 3 } 4 class MyClass{ 5     private class InnerClass implements MyInterface{ 6         public int getValue() { 7             return 1024; 8         } 9 }10     public MyInterface getInn() {11         return new InnerClass();//内部类向上转型为接口12     }13     public static void main(String[] args) {14         MyClass mClass=new MyClass();15         System.out.println(mClass.getInn().getValue());16     }17 }

 

转载于:https://www.cnblogs.com/vincentme/p/7884633.html

你可能感兴趣的文章
【洛谷】CYJian的水题大赛【第二弹】解题报告
查看>>
POJ 1703 Find them, Catch them【种类/带权并查集+判断两元素是否在同一集合/不同集合/无法确定+类似食物链】...
查看>>
L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】
查看>>
Git一分钟系列--快速安装git客户端
查看>>
纵越6省1市-重新启动
查看>>
hive安装以及hive on spark
查看>>
jz1074 【基础】寻找2的幂
查看>>
Wannafly模拟赛5 A 思维 D 暴力
查看>>
【Linux开发】CCS远程调试ARM,AM4378
查看>>
Linux之ssh服务介绍
查看>>
排序:冒泡排序
查看>>
Java中instanceof关键字的用法总结
查看>>
引用类型-Function类型
查看>>
(转)Android 仿订单出票效果 (附DEMO)
查看>>
数据库多张表导出到excel
查看>>
微信小程序去除button默认样式
查看>>
Where does Visual Studio look for C++ Header files?
查看>>
Java打包可执行jar包 包含外部文件
查看>>
Windows Phone开发(37):动画之ColorAnimation
查看>>
js中escape,encodeURI,encodeURIComponent 区别(转)
查看>>