程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java靜態方法不具有多態性,java靜態具有多態

Java靜態方法不具有多態性,java靜態具有多態

編輯:JAVA綜合教程

Java靜態方法不具有多態性,java靜態具有多態


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

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

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

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

 

2、方法是static修飾的

代碼如下所示.

 1 class Base {
 2     public static void staticMethod() {
 3         System.out.println("Base staticMehtod");
 4     }
 5 
 6     public void dynamicMehtod() {
 7         System.out.println("Base dynamicMehtod");
 8     }
 9 }
10 
11 class Sub extends Base {
12     public static void staticMethod() {
13         System.out.println("Sub staticMehtod");
14     }
15 
16     public void dynamicMehtod() {
17         System.out.println("Sub dynamicMehtod");
18     }
19 }
20 
21 public class TJ4 {
22     public static void main(String args[]) {
23         Base c = new Sub();
24         c.staticMethod();
25         c.dynamicMehtod();
26     }
27 }/* OutPut:
28   Base staticMehtod
29   Sub dynamicMehtod
30   */

 

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

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved