Java内部类(2):普通的成员内部类
在成员内部类中要注意两点
第一:成员内部类中不能存在任何static的变量和方法;
第二:成员内部类是依附于外围类的,所以只有先创建了外围类才能够创建内部类。
接下来是两个例子(关键字:.this .new 内部类隐藏)
[.this] 用于内部类生成[对当前创建该内部类的外部类对象]的引用
[.new] 用于必须使用外部类的对象来创建内部类对象的场合
class Test001Sub {
public Test001Sub(String s) {
System.out.println(s);
} void f() {
System.out.println("Test001->f()");
} // 一个内部类
public class Test001Inner {
public Test001Sub callOuter() {
return Test001Sub.this;
}
}
} public class Test001 {
public static void main(String[] args) {
Test001Sub t1 = new Test001Sub("new Test001"); // new Test001
Test001Sub.Test001Inner t1Inner = t1.new Test001Inner();
Test001Sub t2 = t1Inner.callOuter();
t2.f(); // Test001->f()
System.out.println(t1.equals(t2)); // true
}
}
protected及private的访问规则依然适用于内部类,外部通过引用不能访问protected及private对象(内部类隐藏)。
可以在外部类内部创建getInstance()方法获得内部类对象。一般推荐这种方法来创建内部类对象。
interface Contents {
int value();
} interface Destination {
String readLabel();
} class Test002Sub {
protected class Test002Inner1 implements Destination {
private String s; private Test002Inner1(String s) {
this.s = s;
} @Override
public String readLabel() {
return s;
}
} private class Test002Inner2 implements Contents {
private int i = 11; @Override
public int value() {
return i;
}
} public Test002Inner1 instanceInner1(String s) {
return new Test002Inner1(s);
} public Test002Inner2 instanceInner2() {
return new Test002Inner2();
}
} public class Test002 {
public static void main(String[] args) {
Test002Sub test002 = new Test002Sub();
Destination test002Impl1 = test002.instanceInner1("Test002Inner1");
Contents test002Impl2 = test002.instanceInner2();
System.out.println(test002Impl1.readLabel()); // Test002Inner1
System.out.println(test002Impl2.value()); // 11
// 外部通过引用不能访问protected及private对象
// Test002Sub.Test002Inner1 a = test002.new Test002Inner1("a");
// Test002Sub.Test002Inner2 b = test002.new Test002Inner2();
}
}
Java内部类(2):普通的成员内部类的更多相关文章
- java 内部类2(成员内部类)
成员内部类: 特点:在其所在的外部类,的成员函数中,的类. 难点:看注释(涉及到jvm) /*test()执行完毕时,x2从内存中消失,inner的声明周,比x2长,inner还在访问,给人的感觉好像 ...
- java内部类和匿名内部类
内部类即是包含在类里面的又一个类. java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性 (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.clas ...
- java java 内部类
java 内部类 一.java内部类: java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 内部类的共性: (1).内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.c ...
- 【转】Java 内部类总结
Java内部类 一. 含义 在Java编程语言里,程序是由类(class)构建而成的.在一个类的内部也可以声明类,我们把这样的类叫做内部类. 二. 作用 实现了更好的封装,我们知道,普通类(非内部类) ...
- Java内部类小程序(成员内部类,静态内部类,匿名内部类)
/** * 测试java内部类(成员内部类,静态内部类,匿名内部类) * 局部内部类不常用,就不写了. * @package :java05 * @author shaobn * @Describe ...
- JAVA内部类有关
最近在看单例模式的实现,看到有一种利用JAVA静态内部类的特性来实现,对于内部类我还真是不了解,遂了解了一下,代码贴上. /** * 内部类分为:成员内部类.局部内部类.匿名内部类和静态内部类. */ ...
- Java内部类详解
Java内部类详解 说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉.原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法.今天我们就 ...
- [转] Java内部类详解
作者:海子 出处:http://www.cnblogs.com/dolphin0520/ 本博客中未标明转载的文章归作者海子和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置 ...
- Java内部类的一些总结
作为刚入门Java的小白,这两天看到内部类,这里做一个总结,若有错误,欢迎指正~ 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. 内部类分为: 成员内部类.局部内部类.静态嵌套类. ...
- Java内部类的使用小结
转载:http://android.blog.51cto.com/268543/384844/ Java内部类的使用小结 内部类是指在一个外部类的内部再定义一个类.类名不需要和文件夹相同. *内部类可 ...
随机推荐
- PHP判断是否有Get参数的方法
PHP如何判断是否有Get参数,方法很简单,一个函数就可以搞定,需要的朋友可以参考下 if(is_array($_GET)&&count($_GET)>0)//判断是否有Get参 ...
- HTML5新特性——1 HTML5音频
注意:<source>同一个音乐可以添加不同格式的音频,这样就可以满足不同浏览器都能够正常播放,兼容不同浏览器. 代码示例: <!doctype html> <html ...
- 第二个爬虫之爬取知乎用户回答和文章并将所有内容保存到txt文件中
自从这两天开始学爬虫,就一直想做个爬虫爬知乎.于是就开始动手了. 知乎用户动态采取的是动态加载的方式,也就是先加载一部分的动态,要一直滑道底才会加载另一部分的动态.要爬取全部的动态,就得先获取全部的u ...
- Mysql数据库多对多关系未建新表
原则上,多对多关系是要新建一个关系表的,当遇到没有新建表的情况下如何查询多对多的SQL呢? FIND_IN_SET(str,strlist) 官网:http://dev.mysql.com/doc/r ...
- siblings([expr])
siblings([expr]) 概述 取得一个包含匹配的元素集合中每一个元素的所有唯一同辈元素的元素集合.可以用可选的表达式进行筛选.大理石平台维修 参数 exprStringV1.0 用于筛选 ...
- JSP大文件分片上传
核心原理: 该项目核心就是文件分块上传.前后端要高度配合,需要双方约定好一些数据,才能完成大文件分块,我们在项目中要重点解决的以下问题. * 如何分片: * 如何合成一个文件: * 中断了从哪个分片开 ...
- 洛谷P2110 欢总喊楼记
洛谷题目链接 乱搞qwq 我们其实可以找规律,对于每个数$x$,我们先求出从$1$~$x$中有多少符合条件的,记为$sum[x]$,那么类似于前缀和,答案自然就是$sum[r]-sum[l-1]$了 ...
- GC 老年代 新生代
参考资料: http://blog.csdn.net/flamezyg/article/details/44673951 http://www.blogjava.net/ldwblog/archive ...
- 一次router拦截器的应用
实现 退出登陆 无法回退到其它页面 当有登陆状态时 可以拿其它页面的地址直接访问 若没有登陆状态 拿其它页面的地址直接访问 会报错 router.beforeEach((to, from, n ...
- SpringMVC——参数传递
一.接收零散参数 1.装配原则为传递参数名和方法接收参数名一致 2.手动装配@RequestParam name代表页面发送的参数名字 required代表参数是否必须传递 false代表可以不 ...