java 子類不能繼承父類的static方法


先來看一段代碼

/**
 * Created by bjchengpeng on  2018/7/19.
 */

/**
運行結果
* woof * woofaa * * woof * Basenjiaa * * Basenji * Basenjiaa */ public class Bark { public static void main(String[] args) { Dog woofer = new Dog(); Dog nipper = new Basenji(); Basenji child = new Basenji(); woofer.bark(); woofer.aa(); System.out.println(); nipper.bark(); nipper.aa(); System.out.println(); child.bark(); child.aa(); } } class Dog { public static void bark() { System.out.println("woof"); } public void aa() { System.out.println("woofaa"); } } class Basenji extends Dog { public static void bark() { System.out.println("Basenji"); } public void aa() { System.out.println("Basenjiaa"); } }

對於static修飾的變量,當子類與父類中存在相同的static變量時,也是根據“靜態引用”而不是根據“動態引用”來調用相應的變量的。

而在父類和子類中對於非static變量和方法,是根據“動態引用”來調用相應的變量和方法。

 

然而,接着會有這樣的問題存在:java中 子類會不會繼承父類的static變量和static方法

1)先說static方法:子類會不會繼承父類的static方法呢??答案是:不會的,但是是可以訪問的。

看如下的代碼

public class Parent {
    public static void  staticMethod(){
        System.out.println("Parent staticMethod run");

    }

}
public class Son extends Parent {
    //...
}

測試類

package com.wrh.teststaticmethod;

public class Test {

    public static void main(String[] args) {
        Parent child=new Son();
        child.staticMethod();//輸出:Parent staticMethod run   
        Son s=new Son();
        s.staticMethod();//輸出:Parent staticMethod run   


    }

}

運行結果如下

Parent staticMethod run 
Parent staticMethod run

從上面的運行結果可以看出,static方法是可以被子類訪問的。

2)接着來看父類的static修飾的變量,是否能夠被子類繼承呢?? 
答案:也是不可以的。但是也是可以被子類訪問的。

小結

1)子類是不繼承父類的static變量和方法的。因為這是屬於類本身的。但是子類是可以訪問的。 
2)子類和父類中同名的static變量和方法都是相互獨立的,並不存在任何的重寫的關系。

 

參考  https://blog.csdn.net/u010412719/article/details/49254017  Java中子類是否可以繼承父類的static變量和方法而呈現多態特性


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM