zoukankan      html  css  js  c++  java
  • Java子类对于父类中static方法的继承

    今天看到了Java中子类继承父类的一个相关讨论,在网上综合了各家的观点,写下了一篇简短的总结。

    问题如下,在父类中含有staic修饰的静态方法,那么子类在继承父类以后可不可以重写父类中的静态方法呢?

    答案是:不能。   

    很多人可能会提出疑问,因为他们在写代码的时候出现过以下代码,举例:

    父类:Animal.java
    public class Animal {

      public Animal() {

      }

      public void run() {

           System.out.println("动物可以奔跑");

      }

      public static void shout() {

          System.out.println("动物可以叫");

      }

    }

    子类:Dog.java
    public class Dog extends Animal

    {

         public Dog() {

            // TODO Auto-generated constructor stub

           }

         public static void main(String[] args) {

             Dog dog = new Dog();

             dog.run();

             dog.shout();

    }

        @Override

        public void run() {

          System.out.println("狗跑得很快");

        }

    public static void shout() {

      System.out.println("狗的叫声是汪汪汪");

      }

    }
    运行Dog.java结果:
    ​​

    这是不是说明子类实现了对父类中静态方法的重写呢?貌似很有道理,然而我们对Dog.java,稍作改动,即将dog向上转型:

    public class Dog extends Animal

    {

       public Dog() {

         // TODO Auto-generated constructor stub

       }

       public static void main(String[] args) {

       Animal dog = new Dog();

       dog.run();

       dog.shout();

    }

    @Override

    public void run() {

       System.out.println("狗跑得很快");

    }

    public static void shout() {

    System.out.println("狗的叫声是汪汪汪");

    }

    }
    运行结果:
    ​​

    说明子类其实并没有实现对父类stati方法的重写,为什么?

    在Java中,如果父类含有一个静态方法,且在子类中也含有一个返回类型,方法名、参数列表等都与之相同的的静态方法,在子类中只是对父类的该同名方法进行隐藏,并不是重写。父类与子类含有的其实是两个没有关系的方法,两者的行为不具有多态性。
    在上面的例子中,shout方法与类发生了关联,而不是与特定的类的实例相关联,它不在乎什么类型的类正在创建它,而仅仅在意引用的类型。在Animal dog = new Dog()中,dog是一个类Dog在内存中的一个Animal类型的引用,如果一个static方法被调用了,jvm不会检查什么类型正在指向它,他只会调用跟Anima类相关联的方法的实例。
    --------------------- 

  • 相关阅读:
    [BZOJ1578] [Usaco2009 Feb]Stock Market 股票市场(DP)
    [BZOJ1576] [Usaco2009 Jan]安全路经Travel(堆优化dijk + (并查集 || 树剖))
    [BZOJ1575] [Usaco2009 Jan]气象牛Baric(DP)
    [BZOJ1574] [Usaco2009 Jan]地震损坏Damage(贪心 + dfs)
    [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
    [luoguP2862] [USACO06JAN]把牛Corral the Cows(二分 + 乱搞)
    [luoguP3668] [USACO17OPEN]Modern Art 2 现代艺术2(栈)
    [luoguP3608] [USACO17JAN]Balanced Photo平衡的照片(树状数组 + 离散化)
    [luoguP3110] [USACO14DEC]驮运Piggy Back(SPFA || BFS)
    [BZOJ2342] [Shoi2011]双倍回文(manacher)
  • 原文地址:https://www.cnblogs.com/ly570/p/10942328.html
Copyright © 2011-2022 走看看