標籤:沒有 變數 除了 object 傳統 結構 cte -- 預設
對象
對象:
是類的執行個體(實現世界中 真 實存在的一切事物 可以稱為對象)
類:
類是對象的抽象描述
步驟:
1、定義一個類 (用於 描述人:)
( * 人:有特徵和行為)
2、根據類 建立對象 ---- new
* 物件類型 對象名 = new 物件類型();
* 一般情況下 只有對象 才能點出 屬性和方法
物件導向的的三個特徵:封裝 繼承 多態
封裝:將類的屬性私人化,提供公用的get/set存取方法
例
//對屬性的封裝
private String name;
private int age;
// 成員方法
// getXxx()/setXxx()
//對該對象對外界提供方法的封裝
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public int getAge()
{
return age;
}
public void setAge(int age)
{
this.age = age;
}
註:get和set是成對出現的
封裝的作用
① 對象的資料封裝特性徹底消除了傳統結構方法中資料與操作分離所帶來的種種問題,提高了程式的可複用性和可維護性,降低了程式員保持資料與操作內容的負擔。
②對象的資料封裝特性還可以把對象的私人資料和公用資料分離開,保護了私人資料,減少了可能的模組間幹擾,達到降低程式複雜性、提高可控性的目的。
繼承:用新類(子類、衍生類別)繼承已有類(父類 超類 基類), 新類可以直接使用已有類的公有的方法和屬性
作用:提交代碼複用率 減少不必要的代碼
關鍵字:extends
繼承只能單一繼承(父類可以有很多的子類 但是子類只能有一個直屬父類)
子類重寫父類的方法後 會優先調用子類自己方法
繼承主要實現重用代碼,節省開發時間。
1、C#中的繼承符合下列規則:
- 繼承是可傳遞的。如果C從B中派生,B又從A中派生,那麼C不僅繼承了B中聲明的成員,同樣也繼承了A中的成員。Object類作為所有類的基類。
- 衍生類別應當是對基類的擴充。衍生類別可以添加新的成員,但不能除去已經繼承的成員的定義。
- 建構函式和解構函式不能被繼承。除此之外的其它成員,不論對它們定義了怎樣的訪問方式,都能被繼承。基類中成員的訪問方式只能決定衍生類別能否訪問它們。
- 衍生類別如果定義了與繼承而來的成員同名的新成員,就可以覆蓋已繼承的成員。但這並不因為這衍生類別刪除了這些成員,只是不能再訪問這些成員。
- 類可以定義虛文法、虛屬性以及虛索引指標,它的衍生類別能夠重載這些成員,從而實作類別可以展示出多態性。
2、new關鍵字
如果父類中聲明了一個沒有friend修飾的protected或public方法,子類中也聲明了同名的方法。則用new可以隱藏父類中的方法。(不建議使用)
3、base關鍵字
base 關鍵字用於從衍生類別中訪問基類的成員:
- 調用基類上已被其他方法重寫的方法。
- 指定建立衍生類別執行個體時應調用的基類建構函式。
例
class Person {public Person() {}}class Man extends Person {public Man() {}}
類Man繼承於Person類,這樣一來的話,Person類稱為父類(基類),Man類稱為子類
- 繼承只能單一繼承(父類可以有很多的子類 但是子類只能有一個直屬父類)
- 子類重寫父類的方法後 會優先調用子類自己方法
- 如果兩個類存在繼承關係,則子類會自動繼承父類的方法和變數,在子類中可以調用父類的方法和變數
附:
{}:代碼塊
{}定義在方法中:普通代碼塊
{}定義在類中:構造塊
{}定義在類中並且被static所修飾:靜態代碼塊
存取修飾詞:4個
public:整個工程都可以訪問
Producted:同一個包下 或者 異包下的子類
預設(什麼都不寫):同一個包下
Private:當前類
多態:同一種執行個體多種形態
多態出現的的條件:在繼承關係中
- 繼承關係中方法的重寫,同一個類下方法的重載
- 父類的引用指向子類的實體(繼承關係中發生向上轉型,向下轉型)
多態:父類型的引用可以指向子類型的實體(對象)
//向上轉型,將子類型轉換為父類型
Person person=new Student();//當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有,則編譯錯誤;
//向下轉型,將父類型轉換為子類型
Student stu =new (Student)Person;//如果想要調用子類中有而父類中沒有的方法,需要進行強制類型轉換
Java基礎——物件導向