本文實例講述了Java中的多態(tài)用法。分享給大家供大家參考。具體分析如下:
多態(tài),是面向?qū)ο蟮某绦蛟O(shè)計語言最核心的特征。封裝性、繼承性都比較簡單,所以這里只對多態(tài)做一個小小的筆記。。。
1、什么是多態(tài)?
多態(tài)意味著一個對象可以多重特征,可以在特定的情況下,表現(xiàn)出不同的狀態(tài),從而應(yīng)對不同的屬性和方法。在Java中,多態(tài)的實現(xiàn)指的是使用同一個實現(xiàn)接口,以實現(xiàn)不同的對象實例。
例如,我們定義一個Parent類,再定義一個getName()方法返回一個字符串,定義一個形參為Parent類型的成員方法doSomething(Parent obj),在這個方法中調(diào)用obj.getName()。然后再定義兩個類A和B,都從Parent類繼承而來,在子類中重寫getName()方法。最后在main方法中創(chuàng)建一個Parent類的對象objP,調(diào)用objP.doSomething()方法并向其傳遞class A,和class B 的引用。觀察輸出結(jié)果。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
class Parent { private String name = "parent" ; public String getName() { return this .name; } public void doSomething(Parent obj) { //輸出類名 System.out.println(obj.getName()); } public static void main(String[] args) { Parent objP = new Parent(); objP.doSomething( new A()); // 傳遞A的引用,則調(diào)用的是A類的getName方法 objP.doSomething( new B()); // 傳遞B的引用,則調(diào)用的是B類的getName方法 } } class A extends Parent { private String name = "class A" ; //@重寫getName()方法 public String getName() { return this .name; } } class B extends Parent { private String name = "class B" ; //@重寫getName()方法 public String getName() { return this .name; } } |
可見,父類的doSomething方法多態(tài)地調(diào)用了我們傳遞的對象的getName方法,而不是Parent類本身的getName方法。
2、Java中的接口
Java中的接口,是一系列方法的聲明。一個接口只有方法的特征,而沒有方法的實現(xiàn)。這些方法可以從別處通過特定的類來實現(xiàn)。在Java中,用關(guān)鍵字interface來聲明一個接口。
用接口實現(xiàn)多態(tài)的實例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
interface Name { //只聲明,不實現(xiàn) public String getName(); } class A implements Name { private String name = "class A" ; //實現(xiàn)getName方法 public String getName() { return name; } } class B implements Name { private String name = "class B" ; //實現(xiàn)getName方法 public String getName() { return name; } public static void main(String[] args) { Name obj = new A(); System.out.println(obj.getName()); } } |
可以看到,打印出了類A的名字class A。
PS:一個類如果沒有實現(xiàn)接口中的所有方法,那么這個類必須被聲明為abstract(抽象的)。一個abstract類是不允許實例化對象的。
希望本文所述對大家的java程序設(shè)計有所幫助。