在第一个包中创建一个至少有一个方法的借口,然后在第二个包内创建一个类,在其中增加一个protected的内部类以实现这个借口,在第三个保重,继承这个类,并在一个方法中返回该protected内部类的对象,在返回的时候向上转型为第一个包中的接口类型。
package net.sailfish.inner.package1;
/**
* Created by travis on 2016/9/6.
*/
public interface Contents {
int value();
}
package net.sailfish.inner.package2;
import net.sailfish.inner.package1.Contents;
/**
* Created by travis on 2016/9/6.
*/
public class TestContents {
protected class PContents implements Contents{
public PContents() {//这儿如果没有构造函数,在TestPContents中就会报错
}
private int i = 99;
public int value() {
return i;
}
}
}
package net.sailfish.inner.package3;
import net.sailfish.inner.package1.Contents;
import net.sailfish.inner.package2.TestContents;
/**
* Created by travis on 2016/9/6.
*/
public class TestPContents extends TestContents {
Contents makeContents(){
return this.new PContents();
}
public static void main(String[] args) {
TestPContents c = new TestPContents();
System.out.println(c.makeContents().value());
}
}
- 验证作用域
- 内部类的向上转型
- .new语法的使用
- 书中是这么说的,need public constructor to create one in Ex6Base child,需要给Ex6Base的子类创建一个公共的