內部類(九)----內部類的繼承&內部類可以覆蓋嘛
阿新 • • 發佈:2018-12-26
內部類的繼承
- 因為內部類的構造器必須連線到指向其外圍類物件的引用,所以在繼承內部類的時候,會很複雜。問題在於:那個指向外圍類物件的引用必須被初始化,而在匯出類中不再存在可連線的預設物件。
內部類可以被覆蓋嘛?
package com2002;
/**
* Created by Panda on 2018/6/11.
*/
class Egg {
private Yolk yolk;
protected class Yolk {
public Yolk() {
System.out.println("Egg.Yolk()");
}
}
public Egg() {
System.out.println("New Egg()");
yolk = new Yolk();
}
}
public class BigEgg extends Egg{
public class Yolk {
public Yolk() {
System.out.println("BigEgg Yolk()");
}
}
public static void main(String[] args) {
new BigEgg();
}
/**
* New Egg()
Egg.Yolk()
*/
//當繼承了某個外圍類的時候,內部類並沒有發生什麼特別的變化。這兩個內部類是完全獨立的兩個實體
//各自在自己的名稱空間內
}
package com2002;
/**
* Created by Panda on 2018/6/11.
*/
class Egg2{
protected class Yolk{
public Yolk(){
System.out.println("Egg2.Yolk()");
}
public void f(){
System.out.println("Egg2.Yolk.f()" );
}
}
private Yolk yolk=new Yolk();
public Egg2(){
System.out.println("New Egg2()");
}
public void insertYolk(Yolk yolk){this.yolk=yolk;}
public void g(){yolk.f();}
}
public class BigEgg2 extends Egg2{
public class Yolk extends Egg2.Yolk{
public Yolk(){
System.out.println("BigEgg2.Yolk()");
}
public void f(){
System.out.println("BigEgg2.Yolk.f()");
}
}
public BigEgg2(){insertYolk(new Yolk());}
public static void main(String[] args) {
Egg2 egg2=new BigEgg2();
egg2.g();
}
/**
* Egg2.Yolk()
New Egg2()
Egg2.Yolk()
BigEgg2.Yolk()
BigEgg2.Yolk.f()
*/
}