static修飾的方法不能被重寫可以被繼承


今天我們談談為什么抽象類中不能有靜態的抽象方法以及static修飾的方法不能被重寫可以被繼承

1 static修飾的方法不能被重寫可以被繼承
我們知道static修飾的方法為靜態方法,可以直接使用類名.方法名進行調用,即該方法不屬於某個對象屬於該類。

我們根據下面的例子在看看static修飾的方法是否可以被重寫:
---------------------

public class StaticLearnig {
    public static void main(String[] args) {
        SuperClass superClass=new SubClass();
        superClass.a();
        superClass.b();
    }
}
/*
結果:
SuperClass a
SubClass b
*/

class SuperClass{
    //靜態方法
    public static void a(){
        System.out.println("SuperClass a");
    }
    //非靜態方法
    public void b(){
        System.out.println("SuperClass b");
    }

}

class SubClass extends SuperClass{
    //靜態方法
    public static void a(){
        System.out.println("SubClass a");
    }

    //非靜態方法
    public void b(){
        System.out.println("SubClass b");
    }
}

上面的例子我們可以清晰的看出static修飾的方法根本就沒有重寫。static方法引用的時候應該用類名來引用,而不是對象。同時static方法不參與繼承,所以在繼承體系里面也不存在重寫的說法。

  • static修飾的方法可以被繼承
class A{
 public static void a(){
  System.out.println("a");
 }
}
class B extends A{}

public class Test {
   public static void main(String[] args) {
         B.a();
   }
}
//結果:a
//證明靜態方法可以被繼承

靜態的方法可以被繼承,但是不能重寫。如果父類中有一個靜態的方法,子類也有一個與其方法名,參數類型,參數個數都一樣的方法,並且也有static關鍵字修飾,那么該子類的方法會把原來繼承過來的父類的方法隱藏,而不是重寫。通俗的講就是父類的方法和子類的方法是兩個沒有關系的方法,具體調用哪一個方法是看是哪個對象的引用;這種父子類方法不在存在多態的性質。

對於static修飾的方法有了一定的了解,這里大家有沒有想過一個問題為什么abstract修飾的方法是不可同時是static修飾的呢?

 

--后續部分角度一和角度二解釋都有問題,不要看了
---------------------
作者:爆發的~小宇宙
來源:CSDN
原文:https://blog.csdn.net/yu0_zhang0/article/details/80996661
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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