面向物件程式設計的三個基本特性
Java語言的三個基本特點
Java語言是面向物件的程式語言,故有三個基本特性,即:封裝性,繼承性,多型性。這三個特點主要體現在類上,下面對這三個特性逐一進行講解。
封裝性
-
封裝即將資料密封起來,防止外界對資料進行更改。一般情況,類的屬性就是被封住了的。
-
封裝性的幾個優點:提高程式碼的安全性以保護資料、統一介面、隱藏程式碼的實現細節、增加系統可維護性
-
對資料進行封住主要是通過訪問許可權修飾符private來實現的,而將資料封裝後,就不能在類外呼叫、修改資料,因此需要用到類中的方法來實現。get()用來獲取私有屬性的值,set()用於修改私有屬性的值(簡而言之,就是通過類中的public方法來呼叫或修改類中的private屬性)。
//例題
class Student{
private: //定義了四個學生類的私有屬性
int age;
int id;
String name;
String sex;
public Student(){} //構造方法
public void getAge(){ //獲取並返回age的值
return age;
}
public void setAge(int a){ //設定age的值
age=a;
}
}繼承性
-
繼承是存在於面向物件程式中兩個類之間的關係。被繼承的類稱為父類或超類,繼承的類稱為子類。子類可以呼叫父類的公用方法公用屬性。Object類是所有類的父類。
-
繼承的實現
定義子類時,通過關鍵字extends來指明誰是父類。下面,以Person類,Teacher類,Student類來舉例:
class Person{
public String sex;
public int age;
public void live(){}
}
class Teacher extends Person{
public String subject;
public void teach(){}
}
class Student extends Person{
public score;
public study(){}
} -
構造方法在類繼承中的作用
要知道,構造方法是不能被繼承的,而子類又要對從父類中繼承的成員進行初始化,因此,在建立子類物件時,會先呼叫父類的構造方法然後再執行子類的構造方法。具體遵循以下原則:
(1)子類可以通過在自己的構造方法的第一條可執行語句中通過關鍵字super來呼叫父類的構造方法。
(2)若子類構造方法中沒有super關鍵字,在建立物件時,系統將自動呼叫父類的無參構造方法,然後再執行自己的構造方法。注意:當沒有關鍵字super,且父類中也沒有無參構造方法時,在編譯時會出錯。
多型性
一般的,面向物件的多型性體現在兩個方面:
(1)方法的過載。
(2)子類對父類方法的覆蓋。也就是子類對父類方法的重新定義。
-
方法的過載
方法的過載就是同一個類中存在多個方法名相同但引數不同的方法,引數的差異包括引數型別,引數個數等。
在呼叫方法時,方法匹配的原則是:先進行“精準匹配“,若找不到匹配的方法,在進行”自動型別轉換匹配“。
所謂自動型別轉匹配,就是將實參型別轉換至與方法的形參表所匹配的型別。(自動型別轉換是按照值型別的等級由低轉到高,而強制型別轉換需要自己對值進行轉換。)
-
方法的覆蓋
子類將從父類繼承的非私有方法在子類中重新定義,就是方法的覆蓋。這是,在通過子類的物件呼叫方法時,呼叫的就是子類自己重新定義的方法。
在對父類的方法進行重寫時,應與父類具有完全相同的方法名,形參表,返回值型別一般也要相同。
在對父類方法進行重寫時,需要注意:
(1)方法的覆蓋不能改變方法的靜態或非靜態屬性。
(2)不允許子類中方法的訪問修飾符比父類有更多限制。
-
-