Thinking in Java 第十章練習6

題目

在第一個包中創建一個至少有一個方法的接口。然後在第二個包中創建一個類,在其中增加一個protected的內部類以實現那個接口。在第三個包中,繼承這個類,並在一個方法中返回這個protected內部類的對象,返回的時候向上轉型爲第一個包中的接口類型。

代碼

package P195Practice6.Package1;

public interface InnerClassInterface {
	void show();
}
package P195Practice6.Package2;

import P195Practice6.Package1.InnerClassInterface;

public class Outer {

	protected class Inner implements InnerClassInterface {
		public Inner() {			//最坑的地方,類構造器的訪問權限和類訪問權限是相同的,因此如果不寫public構造器的話,是不能創建Inner對象的,因爲Inner不可見
		}

		@Override
		public void show() {
			System.out.println("this is " + this.getClass());
		}
	}

}
package P195Practice6.Package3;

import P195Practice6.Package1.InnerClassInterface;
import P195Practice6.Package2.Outer;

public class ExtendedClass extends Outer {

	public InnerClassInterface getInner(){
		return new Outer().new Inner();
	}

}

//要繼承Outer纔有Inner的訪問權限
//可以把Inner看成是Outer內部的一個protected對象,因此必須繼承Outer纔有Inner可見
package P195Practice6;

import P195Practice6.Package3.ExtendedClass;

public class Practice6 {
	public static void main(String[] args) {
		new ExtendedClass().getInner().show();
	}
}
//output: this is class P195Practice6.Package2.Outer$Inner

吐槽

內部類和訪問權限混在一起的時候就很混亂,這次發現了默認構造器這個坑,以後怕不是會發現更多坑。(我滿臉都是:WHAT???啥玩意???

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章