Java學習筆記之多型

不知為何就叫呵呵發表於2016-08-14

1.父型別的引用可以指向子型別的物件:

  Parent p = new Child();

2.當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,再去呼叫子類的該同名方法。

3.靜態static方法屬於特殊情況,靜態方法只能繼承,不能重寫Override,如果子類中定義了同名同形式的靜態方法,它對父類方法只起到隱藏的作用。呼叫的時候用誰的引用,則呼叫誰的版本。

4.使用多型,只能使用重寫父類的方法,若方法只在父類定義而沒有重寫,呼叫的是父類的方法。

5.如果想要呼叫子類中有而父類中沒有的方法,需要進行強制型別轉換,如上面的例子中,將p轉換為子類Child型別的引用。

6.向上型別轉換(Upcast):將子型別轉換為父型別,不需要顯示指定,即不需要加上前面的小括號和父類型別名。

7.向下型別轉換(Downcast):將父型別轉換為子型別;對於向下的型別轉換,必須要顯式指定,即必須要使用強制型別轉換。並且父型別的引用必須指向子類的物件,即指向誰才能轉換成誰。

9.示例:

 1 public class PolyTest
 2 {
 3     public static void main(String[] args)
 4     {
 5         
 6         //向上型別轉換
 7         Cat cat = new Cat();
 8         Animal animal = cat;
 9         animal.sing();
10 
11                 
12         //向下型別轉換
13         Animal a = new Cat();
14         Cat c = (Cat)a;
15         c.sing();
16         c.eat();
17 
18 
19         //編譯錯誤
20         //用父類引用呼叫父類不存在的方法
21         //Animal a1 = new Cat();
22         //a1.eat();
23         
24         //編譯錯誤
25         //向下型別轉換時只能轉向指向的物件型別        
26         //Animal a2 = new Cat();
27         //Cat c2 = (Dog)a2;
28         
29 
30 
31     }
32 }
33 class Animal
34 {
35     public void sing()
36     {
37         System.out.println("Animal is singing!");
38     }
39 }
40 class Dog extends Animal
41 {
42     public void sing()
43     {
44         System.out.println("Dog is singing!");
45     }
46 }
47 class Cat extends Animal
48 {
49     public void sing()
50     {
51         System.out.println("Cat is singing!");
52     }
53     public void eat()
54     {
55         System.out.println("Cat is eating!");
56     }
57 }
View Code

 

相關文章