static修飾的方法不能被重寫可以被繼承
阿新 • • 發佈:2018-11-19
今天我們談談為什麼抽象類中不能有靜態的抽象方法以及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
版權宣告:本文為博主原創文章,轉載請附上博文連結!