1、為什麼要繼承?如何繼承?繼承到了什麼?
比如我們定義了乙個學生類,所有的學生都擁有一些特定的屬性和方法。但如果這個系統應用於大學生的話,又會有許多的大學生類中特有的屬性和方法。這時就不必在重新定義乙個大學生類了,我們可以讓他繼承學生類。
首先我們先定義乙個學生類:
package cjl.extend0926;
/*** 學生類
* @author wyz**/
public class student
/** 名字屬性*/
public string name;
/*** 設定名字的方法
* @param s 要設定為名字的字串
*/public void setname(string s)
/*** 學生學習的方法
*/public void study()
}然後通過extends關鍵字讓大學生類繼承上面的學生類:
public class unstudent extends student
/*** 方法的重寫
* 重寫:子類重新實現父類中的方法
* 方法名,引數,返回值都一樣,僅僅是方法體不一樣
*/public void study()
}我們稱unsstudent為子類,student叫unstudent的父類,unstudent中就自動具有了student中定義的屬性和方法了。
執行**:
public static void main(string args)
輸出結果:
李四在學習
需要強調一點的是父類的構造方法不能夠被子類繼承。
2、自動轉型和強制轉型
自動轉型指的是子類物件會自動的轉化為父類型別,物件在呼叫父類的方法時,如果子類重寫了父類的方法,呼叫的就是子類的實現,否則就呼叫父類的方法。
另外需要注意的幾點:
1.子類特有的屬性和方法,只能是子類型別的物件才呼叫
2.物件宣告的是什麼型別,就只能呼叫這個類(及父類)中定義的方法
3.乙個類中的屬性和方法,只能是這個類(及子類)的物件才能呼叫
如**:
//自動轉型
//子類物件的型別可以自動轉成父類型別
student stu3 = new unstudent();
stu3.setname("王五");
//4.乙個物件呼叫的方法是父類還是子類的,取決於物件本身的型別
stu3.study();
執行結果:
王五是大學生,在學習
強制轉型指的是將父類型別的物件強制轉化為子類型別。因此強制轉型可能會發生邏輯錯誤。乙個物件可以被強制轉型,肯定是在前面某個地方被自動轉型了。乙個物件被自動轉成父類型別後還想呼叫子類特有的方法,就必須強制轉型。
**:unstudent stu4 = (unstudent)stu3;
stu4.cet4();
執行結果:
王五是大學生,要考試四級!!
3、方法的重寫和過載
在上例中大學生和學生的學習方法應該是不一樣的,所以有必要在子類中對父類的方法進行重寫。重寫就是保持方法的定義不變(包括方法名、引數、返回值),但方法內部實現同父類不同。
如上例中的public void study(){}方法。
如果子類中重寫了父類的方法,子類的物件在呼叫時則呼叫的是子類的方法,否則則呼叫父類的。
方法的過載指的是在同一類中可以出現同名的方法,方法的引數、返回值及函式體不同。物件在呼叫時根據其所含引數及返回值型別呼叫相應的函式。
如:public int study(){}
public int study(int a){}
public void study(){}
4、多型的理解
多型性指的是由於繼承和重寫機制,相同的物件在呼叫相同的方法時,得到的結果可能不一樣。
繼承 虛函式和多型小結
一.知識點總結 繼承 1.定義 在已有類的基礎上建立新類的過程。乙個 b 類繼承 a類,或稱從類 a 派生類 b類 a 稱為基類 父類 類 b 稱為派生類 子類 2.類繼承關係的語法形式 class 派生類名 基類名錶 資料成員和成員函式宣告 基類名錶 構成訪問控制 基類名1,訪問控制 基類名 2 ...
Java繼承和多型簡述
當乙個類有很多子類是,並且這些子類都重寫了父類中的某個例項方法。當我們把子類建立的物件的引用放到乙個父類的物件中時,就得到了該物件的乙個上傳型物件,那麼這個上傳型物件在呼叫這個例項方法時就可能具有多種形態。多型性就是指父類中某個例項方法被其子類重寫時,可以各自產生自己的功能行為。class duot...
Java核心 介面 繼承和多型 多型
利用多型可以使程式具有良好的擴充套件性,並可以對所有類物件進行通用的處理。eg 定義乙個平行四邊形的類 parallelogram 在類中頂乙個 draw 方法。public class parallelogram 如果需要頂乙個繪製正方形的方法,通過定義乙個正方形類來處理正方形物件,會出現 冗餘的...