JAVA普通内部类的用法
内部类顾名思义就是定义在一个类的内部
内部类又有普通内部类、方法和域内的内部类、匿名内部类、嵌套内部类
普通内部类的基础用法
class MyClass{
class InnerClass1{
public InnerClass1() {
System.out.println("InnerClass1 created..");
}
}
class InnerClass2{
public InnerClass2() {
System.out.println("InnerClass2 created..");
}
}
void getInnerClass() {
new InnerClass1();
new InnerClass2();
}
public static void main(String[] args) {
new MyClass().getInnerClass();
}
}
//输出:
InnerClass1 created..
InnerClass2 created..
上图就是一个普通内部类的例子,同时内部类自动拥有对其外围类所有成员的访问权。
main方法中获得内部类的实例需要借助其他方法,因为main方法是static的。
如果想要直接生成对外部类对象和内部类对象的引用,就需要借助.this和.new关键字。
.this关键字
class MyClass{
class InnerClass{
public InnerClass() {
System.out.println("InnerClass created..");
}
MyClass getMyClass() {
System.out.println("getMyClass..");
return MyClass.this;
}
}
InnerClass getInner() {
return new InnerClass();
}
public static void main(String[] args) {
MyClass mc=new MyClass();
MyClass.InnerClass mic=mc.getInner();
MyClass mc2=mic.getMyClass();
}
}
上例代码第8行,内部类通过.this关键字返回了一个MyClass对象。
.new关键字
上述普通内部类的第一个例子,我们得到一个内部类的对象是通过一个void方法。如果想要在main方法中直接获得实例可用
MyClass.InnerClass mic=new MyClass().new InnerClass();
内部类向上转型
内部类向上转型为一个接口时,内部类可以很好的隐藏起来。
interface MyInterface{
int getValue();
}
class MyClass{
private class InnerClass implements MyInterface{
public int getValue() {
return 1024;
}
}
public MyInterface getInn() {
return new InnerClass();//内部类向上转型为接口
}
public static void main(String[] args) {
MyClass mClass=new MyClass();
System.out.println(mClass.getInn().getValue());
}
}
JAVA普通内部类的用法的更多相关文章
- Java基础-内部类
在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...
- Java 基础 内部类
Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...
- Java基础—内部类(转载)
转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...
- 学以致用,通过字节码理解:Java的内部类与外部类之私有域访问
目录: 内部类的定义及用处 打开字节码理解内部类 一.内部类的定义及用处 内部类(inner class)是定义在另一个类中的类.使用内部类,我们可以: 访问该类定义所在的作用域中的数据,包括私有的数 ...
- Java学习--内部类(一)
Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...
- Java的内部类
Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...
- java中this的用法?
2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...
- 转:十八、java中this的用法
http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...
- java使用内部类的好处及其初始化
java使用内部类的原因 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响 java内部类初始化 ForeCatal ...
随机推荐
- Python代码规范利器Flake8
写代码其实是需要规范的,团队中更是如此:不然 Google 也不会发布各种编码规范,耳熟能详的有Google C++ 风格指南,Google Python 风格指南,等等. 这些规范有用吗?有用也没用 ...
- ubuntu安装meshlab
ubuntu安装meshlab https://github.com/nine7nine/meshlab.git
- 关于更新vs2017后发布的问题 命令“bower install”已退出,代码为 9009
更新vs2017 尝试发布 出现 命令“bower install”已退出,代码为 9009 然后我点工具测试了一下nodejs 出现下图弹窗 百度了一下 没找到对策,有没有大侠知道怎么解决 解决 ...
- zigbee之IAR环境搭建
注册机第一个要选择: 为什么? 之前说CC2530是支持zigbee协议的无线芯片,其实它是这款硬件上有一个支持zigbee协议的无线电路,不仅有这款电路,而且还有一块cpu电路,它就是8051cpu ...
- 两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的?
3.两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的? void foo(){ ++a; printf("%d ",a);}A.3 2 ...
- Photo1
Story: 想象你是一个乡村的孩子,你有着健康的肤色,正在和家人一起坐在颠簸的马车上,赶着去城里买东西.正值夏日,黄昏的阳光晒在你的脸上,于是你的脸显得红扑扑的.路上满满的都是葱绿的草和参差不齐的树 ...
- Bootstrap表格类名及对应图形
.table:基础表格 不管制作哪种表格都离不开类名“table”.所以大家在使用Bootstrap表格时,千万注意,你的<table>元素中一定不能缺少类名“table”. .table ...
- servlet中如何发送ajax请求并动态拼接数据到html中
废话不多说,直接上代码 1.servlet 2.js 3.jsp 有不懂得欢迎来扣我哦^_^ 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https ...
- 一篇文章让你快速入门 学懂Shell脚本
Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...
- Jessica's Reading Problem——POJ3320
Jessica's Reading Problem——POJ3320 题目大意: Jessica 将面临考试,她只能临时抱佛脚的在短时间内将课本内的所有知识点过一轮,课本里面的P个知识点顺序混乱,而且 ...