java内部类对象使用.this,.new
public class InnerClass { class Content {
private int i; public int getVlaue() {
return i;
} } class Description { private String lable; Description(String lab) {
this.lable = lab; } public String readLable() {
return lable;
}
} public Content getContentInstance() { return new Content();
} public Description getDescriptionIntance(String lable) { return new Description(lable);
} public void ship(String lable) { Content content = getContentInstance(); Description description = getDescriptionIntance(lable); System.out.println(description.readLable()); System.out.println(description.readLable()); } /**
* 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
* 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
* JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
* @param args
*/
public static void main(String[] args) { InnerClass parcle2 = new InnerClass(); InnerClass.Content c = parcle2.new Content();
System.out.println(c.getVlaue());
// parcle2.ship("hi");
// InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx InnerClass.Description d = parcle2.new Description("hello");
System.out.println(d.readLable());
// InnerClass.Description d = parcle2.getDescriptionIntance("hello");
} }
使用.this,.new
.this 表达的是在内部类对象域内 通过外部类.this 指向了一个在内部类指向外围类对象引用的关系。只有这样可以访问外围类对象的属性与方法
.new表达的是与.this方向相反 当在外围类作用域上 想创建内部类对象 之前通用的做法是 在外围类创建一个指向内部类的引用来创建内部类,但有一种更加快捷的方式
直接外围类.new 就可以表达一个外围类对象引用 。这里必须强调一点 在拥有外部类对象之前是不可能创建外围类对象的,因为内部类对象会暗暗的连接到创建他的外围类对象上
改变一下上面的内部类例子
public class InnerClass { class Content {
private int i; public int getVlaue() {
return i;
} } class Description { private String lable; Description(String lab) {
this.lable = lab; } public String readLable() {
return lable;
}
} public Content getContentInstance() { return new Content();
} public Description getDescriptionIntance(String lable) { return new Description(lable);
} public void ship(String lable) { Content content = getContentInstance(); Description description = getDescriptionIntance(lable); System.out.println(description.readLable()); System.out.println(description.readLable()); } /**
* 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
* 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
* JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
* @param args
*/
public static void main(String[] args) { InnerClass parcle2 = new InnerClass(); InnerClass.Content c = parcle2.new Content();
System.out.println(c.getVlaue());
// parcle2.ship("hi");
// InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx InnerClass.Description d = parcle2.new Description("hello");
System.out.println(d.readLable());
// InnerClass.Description d = parcle2.getDescriptionIntance("hello");
} }
java内部类对象使用.this,.new的更多相关文章
- 【Java】对象、类(抽象类与内部类)、接口
博文内容概况 对象和类 抽象类 接口 内部类 对象和类 对象是对客观事物的抽象,类是对对象的抽象.类是一种数据类型,其外观和行为由用户定义.类中可以设置两种类型的元素:字段(有时被称为数据成员)和方法 ...
- 给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException
前言 1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误: Exception in thread "main" java.lang.NullPointer ...
- java 匿名对象,内部类,修饰符,代码块
匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创 ...
- java面对对象(六)--内部类、匿名内部类
内部类 可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如: class Outer{ … class Inner{ …. } } class Outer1{} // 这个Inner1不是O ...
- Java如何创建内部类对象
public static void main(String[] args) { Person p = new Test().new Person(); } class Person { String ...
- 140、Java内部类之实例化内部类对象
01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; class ...
- Java 匿名对象、内部类
一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...
- Java—匿名对象/内部类/访问修饰符/代码块
匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...
- java 匿名对象与内部类
一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...
随机推荐
- 泓格WINPAC主机与第三方模块rs 485 modbus rtu通信测试
开发语言:C# 开发环境:VS2008(支持WINCE开发的最后一个版本) 运行环境:Windows CE 5.0~7.0 项目说明:多台涨格winpac系列的主机,原来使用泓格SDK开发的程序,采集 ...
- Flask+MySQL+Redis的Docker配置
Docker配置了好多天,昨天晚上终于把碎遮项目的Docker打包完成了,后面会继续完善项目代码,把稳定版本打包后推送到DockerHub上. 网上关于Docker配置的文章很多,但大部分都是复制粘贴 ...
- python 读取目录下的文件
参考方法: import os path = r'C:\Users\Administrator\Desktop\file' for filename in os.listdir(path): prin ...
- .NET 面试题汇总(带答案)
1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 答:尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何 ...
- python自带缓存lru_cache用法及扩展(详细)
本篇博客将结合python官方文档和源码详细讲述lru_cache缓存方法是怎么实现, 它与redis缓存的区别是什么, 在使用时碰上functiontools.wrap装饰器时会发生怎样的变化, ...
- 团队作业part5--测试与发布(Alpha版本)
测试报告 1.测试与解决bug 1)测试人员测试出的bug 游戏失败后方块还能下落 分数设计不太合理 存在行数不可消除的情况 2)开发人员解决bug 2.场景测试 适用群体:打发时间的学生.工作压力大 ...
- vue项目中扫码枪收款
扫码枪会将扫到的数据带入到获取焦点的输入框中,并且触发输入框的enter回车事件 1.页面上要有一个输入框,并且是获取焦点状态,当然它是隐藏的看不到,我是把宽高设置为0,然后加上回车事件. ...
- 【题解】「UVA1149」装箱 Bin Packing
做法显然:贪心,但是怎么贪? 首先从大到小或从小到大排序,窝这次是从大到小排,这样更容易理解(从小到大更方变) 然后设置两个变量 front 和 after 作为前指针和后指针. 循环判断: 当前后两 ...
- NOI Online 题解
T1 对\(t_i = 1\)的边,将\(u_i, v_i\)连一条边权为\(1\)的边.否则连一条边权为\(0\)的边. 对于每一个连通块,若图中不存在一条边权之和为奇数的圈,则可以将这个连通块二染 ...
- IOS实现自动定位和手动选择城市功能
IOS自动定位使用的是高德地图SDK 在高德开放平台http://lbs.amap.com/api/ios-sdk/down/ 下载2D地图SDK和搜索SDK 将SDK导入工程内 按照高德的配置说明进 ...