how2j學習介面與繼承筆記

2021-10-10 18:36:35 字數 2491 閱讀 1664

物件轉型

明確引用型別與物件型別的概念。

在這個例子裡,有乙個物件 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稱為基類...