如果需要生成对外部类对象的引用,可以使用外部类的名字后面紧跟圆点和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"); } } 转载请标明出处:内部类(二) 使用.this与.new & 内部类与向上转型