内部类(九)----内部类的继承&内部类可以覆盖嘛

内部类的继承

  • 因为内部类的构造器必须连接到指向其外围类对象的引用,所以在继承内部类的时候,会很复杂。问题在于:那个指向外围类对象的引用必须被初始化,而在导出类中不再存在可连接的默认对象。
    这里写图片描述

内部类可以被覆盖嘛?

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

猜你喜欢

转载自blog.csdn.net/Panda_____/article/details/80653796