多型是繼封裝、繼承之後,物件導向的第三大特性。
定義:指同一行為具有多個不同的表現形式
前提
繼承或者實現【二選一】
2.方法的重寫【意義體現:不重寫,無意義】
3.父類引用指向子類物件【格式體現】
**父類型別 變數名 = new 子類物件;
變數名.方法名( );
fu fu =
newzi()
; animal a =
newcat()
;
當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;如果有,執行的是子類重寫後的方法。
->
父類 fu
package day10.demo2;
public
class
fuvoid
setage()
voidm1(
)}
子類 zi
package day10.demo2;
public
class
ziextends
fuvoidm2(
)}
主方法類main
package day10.demo2;
public
class
main
}
定義:多型本身是子類型別向父類型別向上轉換的過程,這個過程是預設的。當父類引用指向乙個子類物件時,便是向上轉型。
父型別引用 指向 子型別物件
父型別 a = new 子型別物件();
介面型別 a = new 實現類物件();
myinte***cea a = new myinte***ceaimpl()
object o = new myinte***ceaimpl()
父類型別向子類型別向下轉換的過程,這個過程是強制的。乙個已經向上轉型的子類物件,將父類引用轉為子類引用,可以使用強制型別轉換的格式,便是向下轉型。
轉型的異常:
classcastexception: 型別轉換異常
解決方案: 轉換之前先判斷引用 實際上是不是要轉換的型別物件
引用a instanceof 子型別 => boolean
問 a 實際上是不是子型別物件
什麼是內部類?
將乙個類a定義在另乙個類b裡面,裡面的哪個類a就稱為內部類,b則稱為外部類。
種類: 成員內部類,靜態內部類,區域性內部類[匿名內部類]
成員內部類:定義在類中方法外的類。許可權 public,protected,(default),private
格式:
public
class
outer
}
使用:
內部類中, 可以隨意使用外部類成員
外部類中, 使用內部類成員時需要建立內部類物件
無關類中, 使用內部類成員
1.間接呼叫, 在外部類方法中呼叫內部類方法
main方法中, 呼叫外部類方法
2.直接呼叫, 需要建立內部類物件
外部類.內部類 a = new 外部類().new 內部類();
內部類和外部類有同名成員變數
外部類的成員變數: 外部類.this.變數
內部類的成員變數: this.變數
區域性內部類: 在方法內部定義類, 只在方法中有效
在區域性內部類中, 使用區域性變數, 必須是final的
jdk8 後, 區域性變數事實上沒有發生改變, 那麼final可以省略
一次性的類, 只能用一次
不能使用許可權修飾符
區域性內部類, 需要類只使用一次
匿名內部類是區域性內部類經過優化而來的。
匿名內部類: 繼承抽象類或實現介面
new
inte***cea()
匿名內部類, 只能用一次, new乙個物件
匿名物件, 只能使用一次, 只能呼叫一次方法
注意: 匿名內部類 和 匿名物件 不是一回事 ! ! !
Java 多型和內部類
多型是同乙個行為具有多個不同表現形式或形態的能力。多型就是同乙個介面,使用不同的例項而執行不同操作 比如 parentp newchild 當使用多型方式呼叫方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤 如果有,再去呼叫子類的同名方法。多型的好處 可以使程式有良好的擴充套件,並可以對所有...
多型 介面 內部類
多型的機制問題,參考這篇博文,講的通俗易懂,大概為下 在建立子物件時,呼叫子類構造器前會呼叫父類構造器 即建立乙個子物件,這個子物件中隱含著乙個父物件。多型引用的指標指向的是子物件中的這個父物件,而父物件中的方法指標指向方法區的哪個方法,是根據建立的子物件的型別決定的,當你建立這個子物件時,該子物件...
介面,多型,內部類筆記
介面型別的應用 用於介面指向型別的子類物件 packagecom.sdut.day2 inte ceusb public classbookpc public static voiduseusb usb u classupanimplementsusb public voidclose classm...