激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - java 函數(shù)的重載和重寫實例代碼

java 函數(shù)的重載和重寫實例代碼

2020-05-29 14:37java教程網(wǎng) JAVA教程

本文主要介紹Java 的重載和重寫,學習java的同學都知道Java的多態(tài)有多重要,這里給大家舉例說明函數(shù)的重載和重寫,希望能幫助有需要的小伙伴

java中多態(tài)分為兩種編譯時多態(tài)(重載)和運行時多態(tài)(重寫),編譯時多態(tài)又叫前綁定,運行時多態(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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class OverloadAndOverwrite {
  public static void main(String[] args) {
    A a1 = new A();
    A a2 = new B();
    B b = new B();
    C c = new C();
    D d = new D();
    System.out.print("a1.print(a1): ");
    a1.print(a1);//輸出A and A
    System.out.print("a1.print(b): ");
    a1.print(b);//輸出A and A:原因是因為A中不存在參數(shù)為B的方法,因此會調(diào)用參數(shù)為A的方法,因為B是繼承自A的
    System.out.print("a1.print(c): ");
    a1.print(c);//輸出A and A:原因是因為A中不存在參數(shù)為C的方法,因此會調(diào)用參數(shù)為A的方法,因為C是繼承自B的,B是繼承自A的
    System.out.print("a1.print(d): ");
    a1.print(d);//輸出A and D:原因是因為A中存在參數(shù)為D的方法,因此會調(diào)用參數(shù)為D的方法
    System.out.print("a2.print(b): ");
    a2.print(b);//輸出B and A:原因在于首先入口是A,首先查看A中是否有參數(shù)為B的print方法,發(fā)現(xiàn)沒有那就尋找有沒有參數(shù)為A的方法,因為B是繼承自A的,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個重寫的方法
    System.out.print("a2.print(c): ");
    a2.print(c);//輸出B and A:原因在于首先入口是A,首先查看A中是否有參數(shù)為C的print方法,發(fā)現(xiàn)沒有那就尋找有沒有參數(shù)為B的方法,因為C是繼承自B的,發(fā)現(xiàn)也不存在這樣的方法,那就尋找存在參數(shù)為A的print方法,因為B繼承自A,發(fā)現(xiàn)存在這樣的方法,那么再次查看B中有沒有重寫這個方法,發(fā)現(xiàn)有重新,直接調(diào)用B中這個重寫的方法
    System.out.print("a2.print(d): ");
    a2.print(d);//輸出 A and D:原因在于入口是A,查看A中存在參數(shù)為D的方法,再次查看B中沒有重寫這個方法,因此輸出A中這個方法的結(jié)果即可;
    System.out.print("a2.print(a2): ");
    a2.print(a2);//輸出B and A;原因在于a2的類型是A,因此會調(diào)用A里面參數(shù)為A的print方法,但是a2右邊new的是B,所以因為B中有參數(shù)為A的方法,因此采用的是B里面的這個方法
    System.out.print("b.print(b): ");
    b.print(b);//輸出B and B;原因:入口是B,因此查看B中存不存在參數(shù)為B的print函數(shù),存在則直接輸出;
    System.out.print("b.print(c): ");
    b.print(c);//輸出B and B;原因:入口是B,因此查看B中存不存在參數(shù)為C的print函數(shù),發(fā)現(xiàn)不存在,則查看存不存在參數(shù)為B的print函數(shù),發(fā)現(xiàn)存在,并且C中并沒有重寫該方法,則直接輸出;有一點需要注意的是還需要查看一下A中是否存在參數(shù)為C的print方法,因為B繼承自A,有的話會及成果來這個方法,這樣的話輸出的結(jié)果將變?yōu)锳 and C
    System.out.print("b.print(d): ");
    b.print(d);//輸出A and D;原因:入口是B,雖然B中不存在參數(shù)為D的print函數(shù),但是B繼承自A,A中是存在參數(shù)為D的print函數(shù)的,因此輸出的是A中參數(shù)為D的結(jié)果;
  }
}
class A
{
  public void print(A a)
  {
    System.out.println("A and A");
  }
  public void print(D d)
  {
    System.out.println("A and D");
  }
// public void print(C c)
// {
//   System.out.println("A and C");
// }
}
class B extends A
{
  public void print(B b)
  {
    System.out.println("B and B");
  }
  public void print(A a)
  {
    System.out.println("B and A");
  }
}
class C extends B{}
class D extends C{}

在此需要說明的是:

對于 A a2 = new B( );

 如果單獨打印出a2的話,打印結(jié)果是B@(hash碼),而不是A@(hash碼),但這并不能說明a2的類型是B類型的,因為當我們在上面程序中調(diào)用a2.print(a2);的時候輸出的結(jié)果是B and A而不是A and A(如果假設a2是B類型的話,就應該調(diào)用A類中參數(shù)為B的print方法,因為不存在這樣的方法,那么退而求其次調(diào)用參數(shù)為A的方法就應該輸出A and A了,因為B是A的子類)。

以上就是對重寫和重載的實例代碼分析,希望對Java學習的同學有幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人在线观看一区二区三区 | 国产精品免费一区二区 | 美国av免费看 | 黄色片视频在线观看 | china对白普通话xxxx | 精国品产一区二区三区有限公司 | 看国产一级毛片 | 国产一级免费在线视频 | 国产精品久久久久久久午夜片 | 看黄在线 | 手机国产乱子伦精品视频 | 国产69精品福利视频 | 精国产品一区二区三区四季综 | 法国极品成人h版 | 国产午夜网 | 久久国产亚洲视频 | 毛片视频网站在线观看 | 久久国产秒 | 一本大道av | 成人在线观看一区二区 | 日韩做爰视频免费 | 国产电影av在线 | 欧美激情精品久久久久久黑人 | 欧美日韩在线播放 | 久久一本日日摸夜夜添 | 日韩高清影视 | 国产一区二区免费 | 国产九色视频在线观看 | 美女黄污视频 | 欧美77| 日本视频在线播放 | 国产免费一级 | 久久99精品久久 | 亚洲情av| 成人福利免费在线观看 | 亚洲第一综合色 | 最污网站 | 中文区永久区 | 日韩精品一二三区 | chinese乱子伦xxxx国语对白 | av之家在线观看 |