1. 程式人生 > >多態中成員變量、成員方法等的特點

多態中成員變量、成員方法等的特點

over 靜態 sof 父類引用 ride 來講 過多 引用 blog

 1 public class Test {
 2     public static void main(String[] args) {
 3         Parent p = new Son();
 4         p.show();
 5         System.out.println("a的值為:"+p.a);
 6     }
 7 }
 8 
 9 class Parent {
10     int a=10;
11     public Parent() {
12         System.out.println("父類無參構造,a的值為:"+a);
13     }
14 public void show() { 15 System.out.println("父類方法"); 16 } 17 } 18 19 class Son extends Parent { 20 int a=20; 21 public Son() { 22 System.out.println("子類無參構造,a的值為:"+a); 23 } 24 public void show() { 25 System.out.println("子類方法"); 26 } 27 }

運行結果:

1
父類無參構造,a的值為:10 2 子類無參構造,a的值為:20 3 子類方法 4 a的值為:10

【結論】

多態存在的三個必要條件
一、要有繼承;
二、要有重寫;
三、父類引用指向子類對象。
-----------------------------------------------------------------------------------------------------
1)Parent p = new Son(); //多態必須符合右側類(Son)包含於左側類(Parent),例如 動物 d = new 貓(),貓是動物。

2)構造方法:創造子類對象時,一定會先訪問父類構造方法,對父類數據進行初始化。


3)成員變量:通過多態調用的成員變量仍是父類的成員變量,因為成員變量不存在override(覆蓋)問題。


4)成員方法:通過多態調用的成員方法一般仍是父類中的方法,若在相應子類中被override(覆蓋),則調用子類重寫的方法。

5)靜態方法:通過多態調用的靜態方法仍是父類的靜態方法,因為靜態方法雖然能被子類的靜態方法“重寫”,但嚴格來講算不上是override(覆蓋)。

多態中成員變量、成員方法等的特點