物件轉型
明確引用型別與物件型別的概念。
在這個例子裡,有乙個物件 new adhero(), 同時也有乙個引用ad
物件是有型別的, 是adhero
引用也是有型別的,是adhero
通常情況下,引用型別和物件型別是一樣的。
引用型別和物件型別不一致的情況下的轉換問題。
子類轉父類(向上轉型)
型別轉換有時候會成功,有時候會失敗(參考基本型別的型別轉換)
到底能否轉換成功? 教大家乙個很簡單的判別辦法
把右邊的當做左邊來用,看說得通不
hero h = new hero();
adhero ad = new adhero();
h = ad;
右邊ad引用所指向的物件的型別是 物理攻擊英雄
左邊h引用的型別是 普通英雄
把物理攻擊英雄 當做 普通英雄,說不說得通? 說得通,就可以轉
所有的子類轉換為父類,都是說得通的。
package hero;
public
class
hero
}
父類轉子類(向下轉型)
父類轉子類,有的時候行,有的時候不行,所以必須進行強制轉換。
強制轉換的意思就是 轉換有風險,風險自擔。
hero h =new hero();
adhero ad = new adhero();
h = ad;
ad = (adhero) h;
第3行,是子類轉父類,一定可以的
第4行,就是父類轉子類,所以要進行強轉。
h這個引用,所指向的物件是adhero, 所以第4行,就會把adhero轉換為adhero,就能轉換成功。
hero h =new hero();
adhero ad = new adhero();
support s =new support();
h = s;
ad = (adhero)h;
第4行,是子類轉父類,是可以轉換成功的
第5行,是把h引用所指向的物件 support,轉換為ad引用的型別adhero。 從語義上講,把物理攻擊英雄,當成輔助英雄來用,說不通,所以會強制轉換失敗,並且丟擲異常。
沒有繼承關係的兩個類,互相轉換,一定會失敗。
實現類轉換成介面(向上轉型)。
引用ad指向的物件是adhero型別,這個型別實現了ad介面
10行: 把乙個adhero型別轉換為ad介面
從語義上來講,把乙個adhero當做ad來使用,而ad介面只有乙個physicattack方法,這就意味著轉換後就有可能要呼叫physicattack方法,而adhero一定是有physicattack方法的,所以轉換是能成功的。
介面轉換成實現類(向下轉型)
10行: ad引用指向adhero, 而adi引用是介面型別:ad,實現類轉換為介面,是向上轉型,所以無需強制轉換,並且一定能成功
12行: adi實際上是指向乙個adhero的,所以能夠轉換成功
14行: adi引用所指向的物件是乙個adhero,要轉換為adaphero就會失敗。
instanceof hero 判斷乙個引用所指向的物件,是否是hero型別,或者hero的子類。
adhero ad=
newadhero()
; aphero ap=
newaphero()
; hero h1=ad;
hero h2=ap;
//判斷引用h1指向的物件,是否是adhero
system.out.
println
(h1 instanceof
adhero);
//true
// //判斷引用h2指向的物件,是否是aphero
system.out.
println
(h2 instanceof
aphero);
//true
//判斷引用h1指向的物件,是否是hero的子型別
system.out.
println
(h1 instanceof
hero);
//true
how2j學習介面總結
在設計lol的時候,進攻類英雄有兩種,一種是進行物理系攻擊,一種是進行魔法系攻擊 這時候,就可以使用介面來實現這個效果。介面就像是一種約定,我們約定某些英雄是物理系英雄,那麼他們就一定能夠進行物理攻擊。package com.ly.inte ceexercise public inte ce app...
HOW2J JAVA基礎 介面與繼承綜合練習
uml類圖 unified modeling language,統一建模語言 用於描述類的屬性 方法以及類與類之間的關係。animal類 1.建立animal類,它是所有動物的抽象父類。2.宣告乙個受保護的整數型別屬性legs,它記錄動物的腿的數目。3.定義乙個受保護的構造器,用來初始化legs屬性...
C 學習筆記(2) 繼承與派生
開始之前,我們先說一句,我們打算用三篇筆記搞定c 物件導向基礎,後面開始就要寫泛型程式設計和stl了。節奏有點快是不是?從乙個類派生出另乙個類的格式如下 class a 基類 classb public a 派生類,繼承方式一般用public,當然也有其他方式 此時類a公有派生出了類b,類a稱為基類...