Java靜態方法不具有多態性詳解_java

來源:互聯網
上載者:User

動態綁定機制使得基類的引用能夠指向正確的子類對象,從而使得面向基類編程成為可能。

然而動態綁定在以下兩種情況會失效。

1、基類方法是private或final修飾的

這個很好理解,因為private說明該方法對子類是不可見的,子類再寫一個同名的方法並不是對父類方法進行複寫(Override),而是重建一個新的方法,也就不存在多態的問題了。同理也可以解釋final,因為方法同樣是不可覆蓋的。

2、方法是static修飾的

代碼如下所示.

class Base {  public static void staticMethod() {    System.out.println("Base staticMehtod");  }  public void dynamicMehtod() {    System.out.println("Base dynamicMehtod");  }}class Sub extends Base {  public static void staticMethod() {    System.out.println("Sub staticMehtod");  }  public void dynamicMehtod() {    System.out.println("Sub dynamicMehtod");  }}public class TJ4 {  public static void main(String args[]) {    Base c = new Sub();    c.staticMethod();    c.dynamicMehtod();  }}/* OutPut: Base staticMehtod Sub dynamicMehtod */

輸出結果並不像設想的那樣,輸出 "Sub staticMehtod"。因為靜態方法是與類而不是與某個對象相關聯,c.staticMethod();等同於Car.staticMethod(); 所以盡量不要使用執行個體變數去調用靜態方法,避免混淆。

以上這篇Java靜態方法不具有多態性詳解就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援雲棲社區。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.