首頁 >Java >java教程 >Java中關於對域與靜態方法的存取不具有多態性的詳解

Java中關於對域與靜態方法的存取不具有多態性的詳解

黄舟
黄舟原創
2017-10-10 10:19:541834瀏覽

下面小編就為大家帶來一篇基於Java中對域和靜態方法的存取不具有多態性(實例講解)。小編覺得蠻不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1.將方法呼叫同方法主體關聯起來被稱為

#2.編譯期綁定(靜態)是在程式編譯階段就確定了引用物件的類型

3.運行期綁定(動態綁定)是指在執行期間判斷所引用物件的實際類型,根據其實際的類型呼叫其對應的方法

4.除了static方法和final方法(private方法屬於final方法),其他所有方法都是後期綁定,Java中所有的方法都是透過動態綁定來實作多態

5.存取某個域的行為不具有多態性


package polymorphism; 
 
class SuperField { 
 public int field = 1; 
 
 public int getField() { 
  return field; 
 } 
} 
 
class SubField extends SuperField { 
 public int field = 2; 
  
 public int getField() { 
  return field; 
 } 
  
 public int getSuperField() { 
  return super.field; 
 } 
} 
 
public class FieldPolymorphism { 
 
 public static void main(String[] args) { 
  SuperField sup = new SubField(); 
  System.out.println("sup.field = " + sup.field + ", sup.getField() = " + sup.getField()); 
  SubField sub = new SubField(); 
  System.out.println("sub.field = " + sub.field + ", sub.getField() = " + sub.getField() + 
    ", sub.getSuperField() = " + sub.getSuperField()); 
 } 
 
}

#輸出結果:

sup.field = 1, sup.getField( ) = 2
sub.field = 2, sub.getField() = 2, sub.getSuperField() = 1

當SubField物件轉型為Super引用時,任何網域存取操作都會由編譯器解析,因此不是多態的,SubField實際包含兩個稱為field的域:自己的和從SuperField處繼承來的

#通常將域設置成private,不能直接訪問,也不能被繼承,透過呼叫方法來存取

6.存取某個靜態方法不具有多態性,不與單一物件相關聯


package polymorphism; 
 
class Super { 
  
 public static String staticMethod() { 
  return "Super staticMethod()"; 
 } 
} 
 
class Sub extends Super { 
 public static String staticMethod() { 
  return "Sub staticMethod()"; 
 } 
} 
 
public class StaticPolymorphism { 
 
 public static void main(String[] args) { 
  Super sup = new Sub(); 
  System.out.println(sup.staticMethod()); 
  System.out.println(Sub.staticMethod()); 
 } 
 
}

輸出結果:

Super staticMethod()
Sub staticMethod()

以上是Java中關於對域與靜態方法的存取不具有多態性的詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn