日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础(五)继承和多态

發布時間:2024/4/17 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础(五)继承和多态 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

  1.多態

  先來看一個例子,其中Employee類是父類,Manager類繼承了Employee類:

public static void main(String[] args){// construct a Manager objectManager boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);boss.setBonus(5000);Employee[] staff = new Employee[3];// fill the staff array with Manager and Employee objects staff[0] = boss;staff[1] = new Employee("Harry Hacker", 50000, 1989, 10, 1);staff[2] = new Employee("Tommy Tester", 40000, 1990, 3, 15);// print out information about all Employee objectsfor (Employee e : staff)System.out.println("name=" + e.getName() + ",salary=" + e.getSalary());}

  在for循環中,盡管這里將e聲明為Employee類型,但實際上e既可以引用Employee類型的對象,也可以引用Manager類型的對象。當e引用Employee對象時,e.getSalary()方法嗲用的是Employee類中的getSalary()方法;當e引用Manager對象時,e.getSalary()調用的是Manager類中的getSalary方法。

  一個對象變量(例如:e)可以指示多種實際類型的現象被稱為多態(polymorphism)。在運行時能夠自動地選擇調用哪個方法的現象稱為動態綁定。

  一個用來判斷是否應該設計為繼承關系的簡單規則,就是“is-a”規則,它表明子類的每個對象也是父類的對象。“is-a”規則的另一種表述是置換法則。它表明程序中出現的父類對象的任何地方都可以用子類對象置換。

  在Java中,對象變量是多態的。也就是,一個對象變量既可以引用它本身的類對象,也可以引用它的任何一個子類的對象。

?

  2.抽象類

  父類中抽象方法可以不用實現,為了提高程序的清晰度,包含一個或多個抽象方法的類本身必須被聲明為抽象的。

  除了抽象方法外,抽象類還可以包含具體數據和具體方法。

  抽象方法充當著占位的角色,它們的具體實現在子類中。擴展抽象類可以有兩種選擇:一種是在抽象類中定義部分抽象類方法或者不定義抽象類方法,這樣就必須將子類也標記為抽象類;另一種是定義全部的抽象方法,這樣一來,子類就不是抽象的了。

  類即使不含抽象方法,也可以將類聲明為抽象類。

  抽象類不能被實例化。也就是說,如果一個類聲明為abstract,就不能使用創造這個類的對象,但是可以創建一個具體子類的對象。同時,可以定義一個抽象類的對象變量,但是它只能引用非抽象子類的對象。

  例如:Person類是抽象類,Student是具體子類。

?

Person p = new Student();

?

?

  3.受保護訪問protected

  在前面我們知道了,最好將類中的域標記為private,因為任何聲明為private的內容對其他類都是不可見的,這對于子類來說也完全適用,即就連子類也不能訪問父類的私有域。

  如果希望父類中的某些方法允許被子類訪問,或允許子類的方法訪問父類的某個域,可以將這些方法或域聲明為protected。

  在實際應用中,要謹慎使用protected。如果需要將設計的類提供給其他程序員使用,而在這個域中設置了一些受保護域,由于其他程序員可以由這個類再派生出新類,同時可以訪問其中的受保護域。在這種情況下,如果需要對這個類的實現進行修改,就必須通知所有使用這個類的程序員。這違背了OOP提倡的數據封裝原則。

?

  4總結Java中用于控制可見性的4個訪問控制符

  • private-僅對本類可見
  • public-對任何類都可見
  • protected-對本包和所有子類可見
  • 沒有修飾符-對本包可見

  

  5.總結繼承的設計技巧

  • 將公共操作和域放在父類
  • 不要使用受保護的域

  protected定義的實例域并不能帶來更好地保護,原因主要有兩點:(1)子類集合時無限制的,任何一個人都能夠由某個類派生一個子類,并編寫代碼以直接訪問protected的實例域,從而破壞了封裝性。(2)在Java中,同一個包中的所有類都可以訪問protected域,而不管它是否為這個類的子類。

  • 使用繼承實現“is-a”關系
  • 除非所有繼承的方法都有意義,否則不要使用繼承
  • 在覆蓋方法時,不要改變預期的行為
  • 使用多態,而非類型信息

  例如,下面這種情況就應該考慮使用多態性,如果兩個action是相同的概念,就應該為這個概念定義一個方法,并將其放置在兩個類的父類或接口中。

if(x是類型1)action(x); else if (x是類型2)action(x);
  • 不要過多地使用反射

?  反射是很脆弱的,即編譯器很難幫助人們發現程序中的錯誤,因此只有在運行時才發現錯誤并導致異常。

轉載于:https://www.cnblogs.com/BigJunOba/p/9321606.html

總結

以上是生活随笔為你收集整理的Java基础(五)继承和多态的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。