黑马程序员技术交流社区

标题: 关于内部类生成外部类对象引用的方法 我有点迷糊 [打印本页]

作者: 崔自成    时间: 2013-3-18 11:55
标题: 关于内部类生成外部类对象引用的方法 我有点迷糊
两段代码
  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  那种才是引用外部对象的正确方式? 这两个有啥区别?
作者: 孙晋学    时间: 2013-3-18 12:19
首先两种都可以得到外部对象。
如果返回的是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. }
复制代码

作者: 123    时间: 2013-3-18 12:41
两个都可以。
new Out():是重新生成的一个外部类。
Out.this:是正在调用这个内部类的外部类。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2