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(){ ...
随机推荐
- day6(短信验证接口)
1.注册容联云账号 1.1注册账号 https://www.yuntongxun.com/user/login 1.2登录即可看到开发者账号信息 1.3 添加测试账号 2.使用容联云发送代码测试 ' ...
- msql语句
表相关语句: 创表相关 CREATE TABLE `Student`( `s_id` VARCHAR(20), `s_name` VARCHAR(20) NOT NULL DEFAULT '', `s ...
- error: src refspec master does not match any(个人经验)
分支名写错了,推送不到远程 修改本地分支名称 git branch -m oldName newName 再推送到远程就好了
- moviepy音视频剪辑:使用VideoFileClip、AudioFileClip和write_videofile、write_audiofile进行音视频的加载和输出
专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 老猿学5G博文目录 一.概述 在本地进行音视频处理时,首先要从视频文件 ...
- PyQt(Python+Qt)学习随笔:QTabWidget选项卡部件外观展示类属性elideMode、documentMode、tabBarAutoHide、tabShape介绍
QTabWidget的外观展示类属性包括tabPosition.tabShape.elideMode.usesScrollButtons.documentMode.tabBarAutoHide和ico ...
- PyQt(Python+Qt)学习随笔:QTableWidget表格部件中行高和列宽的计算方式
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTableWidget表格部件中行高和列宽的计算在Qt提供的资料中内容介绍比较泛,细节说得不清楚, ...
- LeetCode初级算法之数组:66 加一
加一 题目地址:https://leetcode-cn.com/problems/plus-one/ 给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一.最高位数字存放在数组的首位, 数 ...
- 深入分析 Java 乐观锁
前言 激烈的锁竞争,会造成线程阻塞挂起,导致系统的上下文切换,增加系统的性能开销.那有没有不阻塞线程,且保证线程安全的机制呢?--乐观锁. 乐观锁是什么? 操作共享资源时,总是很乐观,认为自己可以成功 ...
- 深入理解.NET/WPF内存泄漏
众所周知,内存管理和如何避免内存泄漏(memory leak)一直是软件开发的难题.不要说C.C++等非托管(unmanaged)语言,即使是Java..NET等托管(managed)语言,尽管有着完 ...
- AcWing 369. 北大ACM队的远足
\(\text{Update on 2020.3.25}\) 我之前的做法也有问题,讨论还是不够严谨,导致又有几组(见 打卡评论区)\(\text{Hack}\) 此题数据极水,这里有几种错误写法: ...