JAVA多型特性的實驗
1.物件的資料成員沒有多型特性
以下實驗證明了資料成員不存在多型的特性。
如果是Base指標,就指向Base的資料成員;
如果是Derived的指標,就指向Derived的資料成員。
下面的例子也說明了同樣的問題
2.只有成員函式存在多型特性
物件d呼叫f方法,多型特性導致f呼叫子類的g方法,而不是父類的g方法,故返回27。
3.private final方法會影響多型
Java的多型特性依賴於晚繫結(動態、執行時繫結)
並且Java中所有的繫結都是晚繫結
除了final方法和private方法(private是final的一種)
這兩種方法採用早繫結,即編譯期就確定了執行的方法。
因為f函式呼叫的g函式是私有的,java採用早繫結,所以沒有多型特性,直接繫結在了Base的g函式上。
以下實驗證明了資料成員不存在多型的特性。
如果是Base指標,就指向Base的資料成員;
如果是Derived的指標,就指向Derived的資料成員。
-
class Base {
-
protected int i = 47;
-
}
-
-
class Derived extends Base {
-
protected int i = 27;
-
}
-
-
public class Test {
-
public static void main(String[] args) {
-
Base b = new Derived();
-
System.out.println(b.i);
-
-
Derived d = new Derived();
-
System.out.println(d.i);
-
-
//執行結果:
-
//47
-
//27
-
}
- }
-
class Base {
-
int i = 47;
-
-
int f() {
-
return i;
-
}
-
-
}
-
-
class Derived extends Base {
-
int i = 27;
-
-
int g() {
-
return i;
-
}
-
}
-
-
public class Test {
-
public static void main(String[] args) {
-
Derived d = new Derived();
-
System.out.println(d.f());
-
System.out.println(d.g());
-
//執行結果:
-
//47
//27 -
}
- }
-
class Base {
-
int i = 47;
-
-
int f() {
-
return g();
-
}
-
-
int g() {
-
return i;
-
}
-
-
}
-
-
class Derived extends Base {
-
int i = 27;
-
-
int g() {
-
return i;
-
}
-
}
-
-
public class Test {
-
public static void main(String[] args) {
-
Derived d = new Derived();
- System.out.println(d.f());
-
//執行結果:27
-
}
- }
3.private final方法會影響多型
Java的多型特性依賴於晚繫結(動態、執行時繫結)
並且Java中所有的繫結都是晚繫結
除了final方法和private方法(private是final的一種)
這兩種方法採用早繫結,即編譯期就確定了執行的方法。
-
class Base {
-
int i = 47;
-
-
int f() {
-
return g();
-
}
-
-
private int g() {
-
return i;
-
}
-
-
}
-
-
class Derived extends Base {
-
int i = 27;
-
-
int g() {
-
return i;
-
}
-
}
-
-
public class Test {
-
public static void main(String[] args) {
-
Derived d = new Derived();
-
System.out.println(d.f());
-
//執行結果:47
-
}
- }
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29254281/viewspace-1063748/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java多型特性Java多型
- Java 繼承與多型實驗Java繼承多型
- Java的三大特性:封裝、繼承、多型Java封裝繼承多型
- 什麼是Java多型?如何實現Java多型?Java多型
- java 介面,介面的特性,介面實現多型,面向介面程式設計Java多型程式設計
- 封裝,特性,多型封裝多型
- Java 的多型Java多型
- Java多型實現的必要條件Java多型
- java中的多型Java多型
- Java多型Java多型
- Java的OO與多型Java多型
- Java高階特性—泛型Java泛型
- java多型demoJava多型
- java基礎(三)—–java的三大特性之多型Java多型
- 何為Java 中的多型?Java多型
- Java-對多型的理解Java多型
- Java類的多型機制Java多型
- 實驗六 Java多執行緒設計Java執行緒
- Java學習-多型Java多型
- java多型例項Java多型
- 關於java多型Java多型
- java核心思想物件導向三大特性(封裝,繼承,多型)Java物件封裝繼承多型
- Java 介面實現多型 -- 膝上型電腦綜合例項Java多型
- 實驗---泛型泛型
- 多型體驗,和探索爺爺類指標的多型性多型指標
- Java 10新特性:型別推斷Java型別
- java多型-向上轉型和向下轉型Java多型
- java繼承與多型Java繼承多型
- Java:多型乃幸福本源Java多型
- java多型性淺析Java多型
- Java物件導向--多型Java物件多型
- java 模擬器 多型Java多型
- JAVA高階物件導向二:認識多型 多型的好處Java物件多型
- JAVA多型性<==>我和網友交流實錄 (轉)Java多型
- JAVA與C++的多型異同JavaC++多型
- C++和java多型的區別C++Java多型
- Java抽象類、繼承及多型和介面卡的實現Java抽象繼承多型
- Python 3.6:多型的實現Python多型