A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

两段代码
  1. public class OutClassTest {
  2.         public static void main(String[] args) {
  3.                 Out o = new Out();
  4.                 Out.Inner i = o.getInner();
  5.                 o = i.getOut();
  6.                 o.print();
  7.         }
  8. }

  9. class Out{
  10.        
  11.         void print(){
  12.                 System.out.println("hello");
  13.         }
  14.        
  15.         Inner getInner(){
  16.                 return new Inner();
  17.         }
  18.        
  19.         class Inner{
  20.                 Out getOut(){//生成对外部类对象的引用
  21.                         return new Out();
  22.                 }
  23.         }
  24. }
复制代码
  1. public class OutClassTest {
  2.         public static void main(String[] args) {
  3.                 Out o = new Out();
  4.                 Out.Inner i = o.getInner();
  5.                 o = i.getOut();
  6.                 o.print();
  7.         }
  8. }

  9. class Out{
  10.        
  11.         void print(){
  12.                 System.out.println("hello");
  13.         }
  14.        
  15.         Inner getInner(){
  16.                 return new Inner();
  17.         }
  18.        
  19.         class Inner{
  20.                 Out getOut(){//生成对外部类对象的引用
  21.                         return Out.this;
  22.                 }
  23.         }
  24. }
复制代码
请问 new Out() 和 Out.this  那种才是引用外部对象的正确方式? 这两个有啥区别?

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

2 个回复

倒序浏览
首先两种都可以得到外部对象。
如果返回的是new Out(),那是再创建一个新的Out对象返回,而不是调用getOut()方法的内部类所在的外部类对象。
返回Out.this一般来说是符合要求的
  1. class Out{
  2.         
  3.         void outPrint(){
  4.                 System.out.println("out");
  5.         }
  6.         
  7.         Inner getInner(){
  8.                 return new Inner();
  9.         }
  10.         
  11.         class Inner{
  12.                 Out getOut(){
  13.                         return Out.this;
  14.                 }
  15.                 void innerPrint(){
  16.                         System.out.println("in");
  17.                 }
  18.         }
  19. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
两个都可以。
new Out():是重新生成的一个外部类。
Out.this:是正在调用这个内部类的外部类。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马