1. 程式人生 > >Java面向對象(下)

Java面向對象(下)

nbsp super 些許 dog 現實 pri 能力 子類重寫 方式

Java 中的instanceof 運算符是用來在運行時指出對象是否是特定類的一個實例。instanceof通過返回

一個布爾值來指出,這個對象是否是這個特定類或者是它的子類的一個實例。

類的三大特性:封裝、繼承、多態;
封裝:把復雜的邏輯隱藏起來,對外只顯示一個接口。
繼承:子類繼承父類公開的屬性和方法,這樣可以減少代碼量。
多態:一種事物的多種形態。

一.類的繼承
  1.繼承的概念
    繼承用於描述事物之間的所屬關系,通過集成可以使所有事物之間形成一種關系體系。
    通過extends來實現繼承,其中只允許單繼承,也就是說一個類只能有一個父類,可以好多各類共同擁有一個父類,也允許多重繼承。
   2.重寫父類方法


    (1)重寫與重載
      重寫:在子類當中重新定義在父類當中已經存在的方法,且重寫後方法的權限不能低於父類當中的權限
      重載:在一個類中,有些許方法名相同的方法,但他們參數的個數或者類型不一樣重寫是兩個類,重載一個類
   (2)註意
      父類當中的private修飾的方法和屬性不會被子類繼承到
  3.super關鍵字
   (1)概念
      當子類重寫了父類方法時,子類無法訪問父類中的方法,於是乎就有了super
   (2)作用
      用super調用父類的屬性和方法
      用super調用父類的構造方法,相當於this。(super和this要寫在構造方法第一行,必須是第一行)

二.final關鍵字
final修飾的類不能被繼承,修飾的方法不能被重寫,修飾的變量為常量不能被更改

三.多態

  1.理解
    同一個行為具有多個不同表現形式或形態的能力就是多態,人兩條圖走路,貓四條腿走路,蜈蚣n條腿走路這就是多態,多態體現在方法的重寫和重載,重載式多態,也叫編譯時多態,重寫式多態,也叫運行時多態狗的叫聲是:汪汪汪,而貓的叫聲是:喵喵喵。這就體現了不同動物shout方法的多態
  2.對象類型轉換
    **抽象類和接口可以當做向上轉型的引用變量類型
    (1)向上轉型
       1*概念
          通過類型轉換把子對象轉為父類型
          如 Animal dog=new Dog();
      2*註意

          轉型後只能調用子類父類共同具備的屬性和方法,且屬性和方法的值還是子類的。
          如有一只狗叫大黃(DaHuang)他學會了一個本領fly(),並且他還會用兩條腿跑把它進行向上轉型 Dog daHuang=new daHuang();現他不能fly因為父類dog中沒有fly方法,但他依舊叫大黃,並且可以兩條腿走,這些屬性dog類都具備所以都保留了下來。
       3*Object類
        Object是所有類的父類,他有一個toString()方法,所有對象可直接調用,他用與輸出
        對象的基本信息,如對象所屬類的類名、和對象的地址信息,也可以對toString()
        方法重寫,用於放回一些特有信息
      4*意義
        減少代碼重復
*******************************有例子***********************************************

  (2)向下轉型
      通過類型轉換把父對象轉為子類型
    1*註意事項
      向下轉型的前提是父類對象指向的是子類對象(也就是說,在向下轉型之前,它得先向上轉型)
      向下轉型只能轉型為本類對象(貓是不能變成狗的)
     2*意義
      向上轉型類似於一種模糊化處理,向下轉型則是對模糊化的去除,找回向上轉型丟失的方法

四.接口
  1.抽象類

  (1)定義
      定義一個類時通常需要定義一些方法來描述該累的行為特征,有些時候,這些方法的方式是無法確定的So就誕生了用abstract修飾的抽象類
  (2)特點
      允許在定義方法時不寫方法體,不包含方法體的方法為抽象方法,抽象類中可以有普通的方法也可以同時都包含,也可以不包含抽象方法,抽象類不能創建對象。

  2.接口
  (1)定義
      如果一個抽象類中所有方法都是抽象的我們可以用關鍵字interface修飾(而不是class)使其變為一個接口

  (2)特點
      1*方法全部為抽象方法,所有方法默認用public abstract來修飾,成員變量全部默認用public static final修飾一般不在接口中定義變量
      2*由於接口中全部為抽象方法所有接口不能創建實例化對象,需要重新定義一個類並用implements關鍵字來實現接口中的所有方法。
      3*接口可以通過extends去繼承另一個接口
      4*若一個抽象類實現某個接口只要實現接口中的部分方法就行,普通類需全部實現
      5*一個類可以implements多個接口,但只能extends一個類
      6*一個類可同時實現繼承和實現接口但extends必須在implements前面
  (3)抽象類和接口的理解
      1*接口是對行為的抽象
      2*抽象類生來就是被繼承的
      3*java中類是現實生活中具體事物的映射,所以抽象類是對一種事物的抽象,包括屬性和方法,即對類抽象而接口卻是對類局部進行的抽象即對行為的抽象,在java中繼承是一個 "是不是"的關系,而 接口 的實現則是 "有沒有"的關系。如果一個類繼承了某個抽象類,則子類必定是抽象類的種類,而接口實現則是有沒有、具備不具備的關系
      4*抽象類作為很多子類的父類,可以把它認為是一種模板。而接口可以認為是一種行為規範
      5*對於抽象類,如果需要添加新的方法,可以直接在抽象類中添加具體的實現,子類可以不進行變更;而對於接口則不行,如果接口進行了變更,則所有實現這個接口的類都必須進行相應的改動。

  3.匿名內部類

未完待續

五.異常


六.包的定義與使用

Java面向對象(下)