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(){ ...
随机推荐
- argparse使用范例
if __name__ == "__main__": # https://docs.python.org/zh-cn/dev/library/argparse.html impor ...
- 大数据-redis-redis启动出错
redis启动出错Creating Server TCP listening socket 127.0.0.1:6379: bind: No error 解决方法(1) 首先如果你是从官方redis官 ...
- 推荐4个Flutter重磅开源项目
早上好,骚年,我是小 G,我的公众号「菜鸟翻身」会推荐 GitHub 上有用的项目,一分钟 get 一个优秀的开源项目,挖掘开源的价值,欢迎关注我. 近年来,随着移动智能设备的快速普及,移动多端统一开 ...
- MoviePy v2.0.0.dev1尚不成熟,不建议大家使用
☞ ░ 前往老猿Python博文目录 ░ 在<重要消息:MoviePy v2.0.0.dev1预发布版本已经可以下载安装使用>之后老猿就安装了MoviePy v2.0.0.dev1这个版本 ...
- 从零开始的xxe学习
本文介绍了一个菜鸡对xxe的一步步学习(内容多来源于大佬的博客,先感谢一波) 涉及知识点: (1)xxe 目录: 解析: 1.xxe是什么(不详解了,网上很多的) XXE(XML External E ...
- 模拟数组 push() 方法
var array =[]; Array.prototype.push = function (){ for (var i=0; i< arguments.length; i++){ this[ ...
- IntelliJ IDEA 学习笔记
之前一直用Eclipse,最近尝试使用IDEA,相较于 Eclipse 而言,IDEA强大的整合能力,比如: Git. Maven. Spring 等:提示功能的快速. 便捷:提示功能的范围广:好用的 ...
- LeetCode初级算法之数组:189 旋转数组
旋转数组 题目地址:https://leetcode-cn.com/problems/rotate-array/ 给定一个数组,将数组中的元素向右移动 k 个位置,其中 k 是非负数. 示例 1: 输 ...
- 半夜删你代码队 Day5冲刺
一.每日站立式会议 1.站立式会议 成员 昨日完成工作 今日计划工作 遇到的困难 陈惠霖 跟进作业 完成注册界面 相关界面设计内容知识不充足 侯晓龙 开始双人合作 开始与数据库结合 无 周楚池 初步完 ...
- 【学习笔记】K 短路问题详解
\(k\) 短路问题简介 所谓"\(k\) 短路"问题,即给定一张 \(n\) 个点,\(m\) 条边的有向图,给定起点 \(s\) 和终点 \(t\),求出所有 \(s\to t ...