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

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

普通内部类的基础用法

 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普通内部类的用法的更多相关文章

  1. Java基础-内部类

    在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部类. 下面就先来了解一下这四种内部类 ...

  2. Java 基础 内部类

    Java 基础 内部类 内部类(嵌套类) nested class 目的为外围类enclosing class提供服务. 四种: 静态成员类 static member class 非静态成员类 no ...

  3. Java基础—内部类(转载)

    转载自:java中的匿名内部类总结 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类.广泛意义上的内部类一般来说包括这四种:成员内部类.局部内部类.匿名内部类和静态内部 ...

  4. 学以致用,通过字节码理解:Java的内部类与外部类之私有域访问

    目录: 内部类的定义及用处 打开字节码理解内部类 一.内部类的定义及用处 内部类(inner class)是定义在另一个类中的类.使用内部类,我们可以: 访问该类定义所在的作用域中的数据,包括私有的数 ...

  5. Java学习--内部类(一)

    Java学习--内部类(一) 一. 内部类的定义和特点 class Outer{ privite int num = 5; class Inner{ public void Display(){ Sy ...

  6. Java的内部类

    Java的内部类 首先我们来了解一下什么是内部类? 内部类是指在一个外部类的内部再定义一个类.内部类可以是静态static的,也可用public,default,protected和private修饰 ...

  7. java中this的用法?

    2008-07-28 08:10cztx5479 | 分类:JAVA相关 | 浏览4533次 java中this的用法? import java.awt.*; import java.awt.even ...

  8. 转:十八、java中this的用法

    http://blog.csdn.net/liujun13579/article/details/7732443 我知道很多朋友都和我一样:在JAVA程序中似乎经常见到“this”,自己也偶尔用到它, ...

  9. java使用内部类的好处及其初始化

    java使用内部类的原因 每个内部类都能独立地继承自一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响          java内部类初始化 ForeCatal ...

随机推荐

  1. Python代码规范利器Flake8

    写代码其实是需要规范的,团队中更是如此:不然 Google 也不会发布各种编码规范,耳熟能详的有Google C++ 风格指南,Google Python 风格指南,等等. 这些规范有用吗?有用也没用 ...

  2. ubuntu安装meshlab

    ubuntu安装meshlab https://github.com/nine7nine/meshlab.git

  3. 关于更新vs2017后发布的问题 命令“bower install”已退出,代码为 9009

    更新vs2017 尝试发布 出现  命令“bower install”已退出,代码为 9009 然后我点工具测试了一下nodejs 出现下图弹窗  百度了一下 没找到对策,有没有大侠知道怎么解决 解决 ...

  4. zigbee之IAR环境搭建

    注册机第一个要选择: 为什么? 之前说CC2530是支持zigbee协议的无线芯片,其实它是这款硬件上有一个支持zigbee协议的无线电路,不仅有这款电路,而且还有一块cpu电路,它就是8051cpu ...

  5. 两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的?

    3.两个线程并发执行以下代码,假设a是全局变量,那么以下输出______是不可能的? void foo(){    ++a;    printf("%d ",a);}A.3 2   ...

  6. Photo1

    Story: 想象你是一个乡村的孩子,你有着健康的肤色,正在和家人一起坐在颠簸的马车上,赶着去城里买东西.正值夏日,黄昏的阳光晒在你的脸上,于是你的脸显得红扑扑的.路上满满的都是葱绿的草和参差不齐的树 ...

  7. Bootstrap表格类名及对应图形

    .table:基础表格 不管制作哪种表格都离不开类名“table”.所以大家在使用Bootstrap表格时,千万注意,你的<table>元素中一定不能缺少类名“table”. .table ...

  8. servlet中如何发送ajax请求并动态拼接数据到html中

    废话不多说,直接上代码 1.servlet 2.js 3.jsp 有不懂得欢迎来扣我哦^_^ 详细介绍请查看全文:https://cnblogs.com/qianzf/ 原文博客的链接地址:https ...

  9. 一篇文章让你快速入门 学懂Shell脚本

    Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合. Shell可以直接使用在win/Unix/Linux上面 ...

  10. Jessica's Reading Problem——POJ3320

    Jessica's Reading Problem——POJ3320 题目大意: Jessica 将面临考试,她只能临时抱佛脚的在短时间内将课本内的所有知识点过一轮,课本里面的P个知识点顺序混乱,而且 ...