1. 程式人生 > >內部類(九)----內部類的繼承&內部類可以覆蓋嘛

內部類(九)----內部類的繼承&內部類可以覆蓋嘛

內部類的繼承

  • 因為內部類的構造器必須連線到指向其外圍類物件的引用,所以在繼承內部類的時候,會很複雜。問題在於:那個指向外圍類物件的引用必須被初始化,而在匯出類中不再存在可連線的預設物件。
    這裡寫圖片描述

內部類可以被覆蓋嘛?

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() */ }