内部类(二) 使用.this与.new & 内部类与向上转型

匿名 (未验证) 提交于 2019-12-03 00:26:01
  • 如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和this。

  • 有时候需要告知某些其他对象,去创建其某个内部类的对象。需要在new表达式中提供对其他外部类对象的引用,这时需要使.new语法。

  • 要想直接创建内部类的对象,不能按照想象的方式,去引用外部类的名字DotNew,而是必须使用外部类的对象来创建该内部类对象。

  • 在拥有外部类对象之前是不可能创建 内部类对象的。这是因为内部类对象会连接到创建它的外部类对象上。但是,如果创建的是嵌套类(静态内部类),就不需要对外部类对象的引用。
  • 当将内部类向上转型为其基类,尤其是转型为一个借口的时候,内部类很有用。(从实现了某个接口的对象,得到对此接口的引用,与向上转型为这个对象的基类,实质上效果是一样的)这是因为此内部类―某个接口的实现―能够完全不可见,并且不可用。所得到的只是指向基类或接口的引用,能够很方便地隐藏实现细节。
/**  * Created by Panda on 2018/6/8.  */ public interface Contents {     int value(); }
/**  * Created by Panda on 2018/6/8.  */ public interface Destination {     String readLabel(); }
/**  * Created by Panda on 2018/6/8.  */  //private 内部类给类的设计者提供了一种途径 通过这种方式可以完全阻止任何依赖于类型的编码,并且完全隐藏了实现的细节。 class Parcel4{     private class PContents implements Contents{         private int i=11;         @Override         public int value() {             return i;         }     }     protected class PDestination implements Destination{         private String label;         private PDestination(String label){             this.label=label;         }         @Override         public String readLabel() {             return label;         }     }      public Destination destination(String s){         return new PDestination(s);     }     public Contents contents(){         return new PContents();     } } public class TestParcel {     public static void main(String[] args) {         Parcel4 parcel4=new Parcel4();         Contents contents=parcel4.contents();         Destination destination =parcel4.destination("milk");     } }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!