1. public class InnerClass {
  2.  
  3. class Content {
  4. private int i;
  5.  
  6. public int getVlaue() {
  7. return i;
  8. }
  9.  
  10. }
  11.  
  12. class Description {
  13.  
  14. private String lable;
  15.  
  16. Description(String lab) {
  17. this.lable = lab;
  18.  
  19. }
  20.  
  21. public String readLable() {
  22. return lable;
  23. }
  24. }
  25.  
  26. public Content getContentInstance() {
  27.  
  28. return new Content();
  29. }
  30.  
  31. public Description getDescriptionIntance(String lable) {
  32.  
  33. return new Description(lable);
  34. }
  35.  
  36. public void ship(String lable) {
  37.  
  38. Content content = getContentInstance();
  39.  
  40. Description description = getDescriptionIntance(lable);
  41.  
  42. System.out.println(description.readLable());
  43.  
  44. System.out.println(description.readLable());
  45.  
  46. }
  47.  
  48. /**
  49. * 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
  50. * 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
  51. * JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
  52. * @param args
  53. */
  54. public static void main(String[] args) {
  55.  
  56. InnerClass parcle2 = new InnerClass();
  57.  
  58. InnerClass.Content c = parcle2.new Content();
  59. System.out.println(c.getVlaue());
  60. // parcle2.ship("hi");
  61. // InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx
  62.  
  63. InnerClass.Description d = parcle2.new Description("hello");
  64. System.out.println(d.readLable());
  65. // InnerClass.Description d = parcle2.getDescriptionIntance("hello");
  66. }
  67.  
  68. }

使用.this,.new

.this  表达的是在内部类对象域内  通过外部类.this 指向了一个在内部类指向外围类对象引用的关系。只有这样可以访问外围类对象的属性与方法

.new表达的是与.this方向相反  当在外围类作用域上 想创建内部类对象  之前通用的做法是 在外围类创建一个指向内部类的引用来创建内部类,但有一种更加快捷的方式

直接外围类.new  就可以表达一个外围类对象引用 。这里必须强调一点  在拥有外部类对象之前是不可能创建外围类对象的,因为内部类对象会暗暗的连接到创建他的外围类对象上

改变一下上面的内部类例子

  1. public class InnerClass {
  2.  
  3. class Content {
  4. private int i;
  5.  
  6. public int getVlaue() {
  7. return i;
  8. }
  9.  
  10. }
  11.  
  12. class Description {
  13.  
  14. private String lable;
  15.  
  16. Description(String lab) {
  17. this.lable = lab;
  18.  
  19. }
  20.  
  21. public String readLable() {
  22. return lable;
  23. }
  24. }
  25.  
  26. public Content getContentInstance() {
  27.  
  28. return new Content();
  29. }
  30.  
  31. public Description getDescriptionIntance(String lable) {
  32.  
  33. return new Description(lable);
  34. }
  35.  
  36. public void ship(String lable) {
  37.  
  38. Content content = getContentInstance();
  39.  
  40. Description description = getDescriptionIntance(lable);
  41.  
  42. System.out.println(description.readLable());
  43.  
  44. System.out.println(description.readLable());
  45.  
  46. }
  47.  
  48. /**
  49. * 在创建外部类对象前,是不可以创建内部类对象的,因为内部类对象会暗暗的连接到外部类对象之上。<p>
  50. * 如果你想通过外围类对象创建内部类对象 之前已经说过最简单的方法是在外围类声明一个方法指向其内部类的对象。另一种更加简单的做法
  51. * JAVA支持通过外围类对象.new 语法表达一个外围类对象的引用
  52. * @param args
  53. */
  54. public static void main(String[] args) {
  55.  
  56. InnerClass parcle2 = new InnerClass();
  57.  
  58. InnerClass.Content c = parcle2.new Content();
  59. System.out.println(c.getVlaue());
  60. // parcle2.ship("hi");
  61. // InnerClass.Content c = parcle2.getContentInstance();// 如果想在外部类的非静态方法之外的任意位置访问某个内部类的对象,那么必须通过OutClass.xx
  62.  
  63. InnerClass.Description d = parcle2.new Description("hello");
  64. System.out.println(d.readLable());
  65. // InnerClass.Description d = parcle2.getDescriptionIntance("hello");
  66. }
  67.  
  68. }

java内部类对象使用.this,.new的更多相关文章

  1. 【Java】对象、类(抽象类与内部类)、接口

    博文内容概况 对象和类 抽象类 接口 内部类 对象和类 对象是对客观事物的抽象,类是对对象的抽象.类是一种数据类型,其外观和行为由用户定义.类中可以设置两种类型的元素:字段(有时被称为数据成员)和方法 ...

  2. 给内部类对象数组属性赋值时报错:Exception in thread "main" java.lang.NullPointerException

    前言 1255: 打怪升级(Java),写这个题目程序的时候,控制台提示如下错误: Exception in thread "main" java.lang.NullPointer ...

  3. java 匿名对象,内部类,修饰符,代码块

    匿名对象是在建对象时只有创建对象的语句方法而没有把对象的地址赋值给变量,匿名对象只能调用一次方法,想再调用时需要再创建一个新的匿名对象 创建普通对象:Person p =new Person(); 创 ...

  4. java面对对象(六)--内部类、匿名内部类

    内部类 可以在一个类的内部定义另一个类这种类成为内部类或嵌套类,比如: class Outer{ … class Inner{ …. } } class Outer1{} // 这个Inner1不是O ...

  5. Java如何创建内部类对象

    public static void main(String[] args) { Person p = new Test().new Person(); } class Person { String ...

  6. 140、Java内部类之实例化内部类对象

    01.代码如下: package TIANPAN; class Outer { // 外部类 private String msg = "Hello World !"; class ...

  7. Java 匿名对象、内部类

    一.匿名对象 1.概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. public class Person{ public void eat(){ System.o ...

  8. Java—匿名对象/内部类/访问修饰符/代码块

    匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. //创建一个普通对象 Person p = new Person(); //创建一个匿名对象 new Pers ...

  9. java 匿名对象与内部类

    一 匿名对象 1.匿名对象的概念 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 例如: public class Person{ public void eat(){ ...

随机推荐

  1. python初次接触

    1.python有什么用或者能做什么? 可以做网站(比如 YouTube.豆瓣),可以做图片处理,可以做科学计算,也可以爬虫,甚至于游戏,学好Python后不用担心没有用武之地,Google就大量的在 ...

  2. 从七牛云迁移图片到github

    迁移理由 问题是网站的大部分图床都是用的七牛云,官网有改动,所以原测试域名都失效,所以决定进行迁移,将七牛云中的图片迁移到github仓库中. 迁移步骤 Step1:从废弃测试域名空间至可用测试域名空 ...

  3. Google浏览器PostMan插件版安装步骤

    PostMan插件版安装步骤: 第一步:把下载后的.crx扩展名的离线Chrome插件的文件扩展名改成.zip或者.rar 第二步:右键点击该文件,并使用压缩软件(如winrar.360压缩等)对该压 ...

  4. 用python讲解数据结构之树的遍历

    树的结构 树(tree)是一种抽象数据类型或是实现这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合 它具有以下的特点: ①每个节点有零个或多个子节点: ②没有父节点的节点称为根节点: ③ ...

  5. MongoDB 复合索引结构

  6. 题解-Sakuya's task

    题面 Sakuya's task \[\left(\sum_{i=1}^n\sum_{j=1}^n \varphi(\gcd(i,j))\right)\bmod 10^9+7 \] 数据范围:\(1\ ...

  7. 【CH 弱省互测 Round #1 】OVOO(可持久化可并堆)

    Description 给定一颗 \(n\) 个点的树,带边权. 你可以选出一个包含 \(1\) 顶点的连通块,连通块的权值为连接块内这些点的边权和. 求一种选法,使得这个选法的权值是所有选法中第 \ ...

  8. 图论-zkw费用流

    图论-zkw费用流 模板 这是一个求最小费用最大流的算法,因为发明者是神仙zkw,所以叫zkw费用流(就是zkw线段树那个zkw).有些时候比EK快,有些时候慢一些,没有比普通费用流算法更难,所以学z ...

  9. Springboot mini - Solon详解(三)- Solon的web开发

    Springboot min -Solon 详解系列文章: Springboot mini - Solon详解(一)- 快速入门 Springboot mini - Solon详解(二)- Solon ...

  10. gitignore文件

    gitignore文件 python .gitignore .idea/ *.bak test* logs/ *.log # *.txt # Byte-compiled / optimized / D ...