多型遇到的問題以及解決方法

2021-10-25 10:30:07 字數 1538 閱讀 6406

我們在學習的過程中肯定會遇到很多的問題,比如我剛開始學多型的時候,遇到的問題,就是,多型是什麼,但後面我學會後,卡在了乙個地方,那就是多型到底該怎麼使用呢,可能大部分人都會有這種問題,感覺多型其實和繼承差不多的,用多型我為什麼不用繼承呢,還有多型的上下轉型到底有什麼用啊,之類的問題,我們今天來看一下這些問題。

繼承:將某類事物中公共的屬性及方法抽離出來,以簡化**

方法重寫:在繼承或實現關係中,方法名相同,引數列表相同,返回值型別相同,子類中的許可權要大於或等於父類中的許可權

為什麼需要重寫呢?

父類提供的功能,但是子類有自己的特殊實現形式,此時就可以重寫,例如:人都會吃飯

抽象類:抽象的不具體的

為什麼要由抽象類存在?

1、普通類中不能多繼承,因為會出現呼叫不明確的問題

2、當所有的子類都有自己的特殊實現時,父類中方法的方法體就沒有存在的意義

介面1、父類中的方法體沒有實際意義時,父類中的方法仍然需要存在,在介面存在的意義就是作為規則

2、擴充套件

3、耦合性低

這相當於在繼承的概念上又加了一層概念,在抽象的關係上又多了一層概念,到介面,介面和繼承是很相似的,所以我我們又回到了繼承上面,相當於是乙個輪迴

多型的使用場景

需要 描述多個子類的時候,多個子類有公共的方法.

多型 必須要有繼承或實現的關係

父類資料型別 變數名 = new 資料型別(); //有繼承關係

資料型別 變數名 = new 資料型別();//單個的類

user user = new user();

user user2 = new user();

user = user2;

int count = 1;//當需要對某乙個物件進行多次使用的時候才需要定義變數接收

上述的兩個語法,其實可以不要前面的變數定義 1 1

疑問:為什麼可以使用不同的型別接收

變數的存在是接收了某個具體的物件,也可以指代其他的同型別的物件

疑問:什麼時候會用到多型

public void method(三 小三)

public void method(綠 小綠)

//方法存在的意義時用來描述老張家的孩子的,之所以傳了乙個引數的型別是老張,因為老張家有多個孩子,為了方便描述

//實際要去描述的仍然是老張家的孩子

public void method(張 老張)

這個呢,是我寫的乙個多型的案例,告訴大家為什麼要用多型,多型是什麼,有什麼作用

向上轉型和向下轉型:

向上轉型是為了統一描述,向上轉型只能呼叫公共方法,向下轉型就是從父類轉為某乙個子類,呼叫子類裡的方法

向上轉型是自動進行的,也稱隱式轉換

向下是強制轉換,稱顯式轉換

子父類呼叫的時候不明白

普通方法編譯的時候看的是父類裡的方法,執行的時候看的是子類的方法

靜態方法編譯的時候看的是父類裡的方法,執行的時候看的是父類的方法

公共的屬性是一樣的

這些呢,是我總結出來的一些方法和概念,大家可以看一看,因為接觸的還不多,後面我可能還會繼續的補充。

記錄遇到的問題以及解決方法

1.在使用openwrt編譯工具鏈編譯測試程式。opt toolchain mspdc2k bin arm openwrt linux gcc main.c o test 警告資訊 arm openwrt linux gcc warning environment variable staging ...

學習Mysql遇到的問題以及解決方法

access denied for user qiuxingli localhost to database db book 有denied說明這個mysql使用者沒有得到授權,mysql運算元據庫是需要授權的 可以用以下方法來獲取使用者授權 1 用root賬戶登入 我的資料庫的root賬戶賬號是r...

部署專案遇到的mysql問題以及解決方法

1 資料庫報錯 expression 1 of order by clause is not in select list,references column oss web.i.create date which is not in select list this is incompatible...