zoukankan      html  css  js  c++  java
  • java 内部类可以被覆盖吗

    如果创建了一个内部类,然后继承其外围类并重新定义内部类时,"覆盖"内部类就好像是其外围类的一个方法,并不起作用,

    这两个内部类是完全独立的两个实体,各自在自己的命名空间内

    //: innerclasses/BigEgg.java
    // An inner class cannot be overriden like a method.
    import static net.mindview.util.Print.*;
    
    class Egg {
      private Yolk y;
      protected class Yolk {
        public Yolk() { print("Egg.Yolk()"); }
      }
      public Egg() {
        print("New Egg()");
        y = new Yolk();
      }
    }    
    
    public class BigEgg extends Egg {
      public class Yolk {
        public Yolk() { print("BigEgg.Yolk()"); } //这里并没有输出
      }
      public static void main(String[] args) {
        new BigEgg();
      }
    } /* Output:
    New Egg()
    Egg.Yolk()
    *///:~

    当然,明确的继承某个内部类也是可以的

    //: innerclasses/BigEgg2.java
    // Proper inheritance of an inner class.
    import static net.util.Print.*;
    
    class Egg2 {
      protected class Yolk {
        public Yolk() { print("Egg2.Yolk()"); }
        public void f() { print("Egg2.Yolk.f()");}
      }
      private Yolk y = new Yolk();
      public Egg2() { print("New Egg2()"); }
      public void insertYolk(Yolk yy) { y = yy; }
      public void g() { y.f(); }
    }    
    
    public class BigEgg2 extends Egg2 {
      public class Yolk extends Egg2.Yolk { //通过继承明确的继承了Egg2.Yolk类,并覆盖了其中的方法
        public Yolk() { print("BigEgg2.Yolk()"); }
        public void f() { print("BigEgg2.Yolk.f()"); }
      }
      public BigEgg2() { insertYolk(new Yolk()); }//向上转型成Egg2.Yolk类
      public static void main(String[] args) {
        Egg2 e2 = new BigEgg2();
        e2.g();
      }
    } /* Output:
    Egg2.Yolk()
    New Egg2()
    Egg2.Yolk()
    BigEgg2.Yolk()
    BigEgg2.Yolk.f()
    *///:~
  • 相关阅读:
    Pycharm中下载 requirement.txt 的文件并添加镜像源
    GCN数据集Cora、Citeseer、Pubmed文件分析
    [BUUCTF]PWN——picoctf_2018_buffer overflow 1/2
    [BUUCTF]PWN——CmmC_Simplerop
    [BUUCTF]REVERSE——[GKCTF2020]Check_1n
    [BUUCTF]PWN——jarvisoj_test_your_memory
    [BUUCTF]PWN——bjdctf_2020_router
    [BUUCTF]PWN——bjdctf_2020_babyrop2
    [BUUCTF]PWN——[ZJCTF 2019]Login
    [BUUCTF]PWN——jarvisoj_level3_x64
  • 原文地址:https://www.cnblogs.com/jiangfeilong/p/10241765.html
Copyright © 2011-2022 走看看