談面向對象的三大特征
引:什麽是面向對象?
面向對象,專註於由誰(哪個對象)來解決這個問題,而調用者無需關註對象實現的細節。
編程特點:出現了一個個的類,從類中拿到對象,通過對象直接解決問題。
應用:Java PHP c++ c# Python
面向對象的三大特征:繼承 封裝 多態
分別了解繼承、封裝、多態 ↓↓↓
一、繼承
1、子類繼承父類,使用extends關鍵字。
代碼示例:
public class Person {
String name;
String sex;
int age;
}
public class Chinese extends Person {
String language;
}
Chinese子類繼承Person父類
2、子類中,需要訪問父類成員,使用super關鍵字。
super.屬性 訪問父類屬性
super.方法 訪問父類方法
→ 如果,子類中沒有同名的屬性和方法覆蓋父類,則依然可以直接使用 this.屬性 調用從父類中繼承的非私有屬性。
但是,如果子類中重寫了與父類同名的屬性:this.屬性 訪問的是本類;super.屬性 訪問的是父類屬性。
例:
public class Chinese extends Person {
String name = "aa";
String language = "Chinese";
}
System.out.println(super.name);
System.out.println(this.language);
→ 在子類構造函數中,直接使用super(); 表示調用父類構造。而且,super()函數必須在子類構造的第一行。
代碼示例:
public Chinese (String name,String sex,int age,String language){
super(name,sex,age);
this.language = language;
}
註意:即使使用super關鍵字,也不能繼承父類的私有屬性和私有方法。
3、子類可以訪問父類哪些屬性和方法?
private 本類
默認省略(friendly) 本類 同包
protected 本類 同包 非同包子類
public 本類 同包 非同包子類 其他任何包都可用
→ 子類與父類不在同一包中,那麽在子類中,子類實例可以訪問其在父類中繼承而來的protected方法,而不能訪問父類實例的protected方法。
4、繼承後的初始化順序:
父類屬性——父類構造方法——子類屬性——子類構造方法
5、在Java中,繼承只能單繼承,不能多重繼承。
但是,可以多層繼承:
例如:
public class Test1{}
public class Test2 extends Test1{}
public class Test3 extends Test2{}
此時,Test3就可以得到Test2和Test1兩個類中的非私有屬性。
二、封裝
1、屬性的封裝
1)、將類的屬性進行私有化處理,不允許外部程序進行直接訪問。並對外提供統一的方法用於設置和讀取私有屬性;
2)、實現訪問控制,限制屬性訪問。但,不是拒絕訪問。
作用:只能通過規定的方法訪問數據,方便在方法中加入控制語句,防止不合法數據賦值。
get()、set()方法訪問private屬性 ↓
示例:
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
2、封裝
除了屬性的封裝之外,將需要重復使用的代碼提取到方法中,這叫方法的封裝。
將相同的屬性和方法抽象成一個類,這也是封裝的思想。
三、多態
1、多態:同一種事物,由於條件的不同,展示出不同的結果,叫做多態;
示例:
英國人說英國話,中國人說中國話,這不叫多態。
同樣是人,有人說中國話,有人說英國話,這就是多態。
2、程序中的多態:同一個引用類型,由於使用不同的對象實例,而執行不同的操作。
實例:
Chinese c = new Chinese(); c.say();
English e = new English(); e.say();
→ 英國人說英國話,中國人說中國話,這不叫多態。
Person p = new Chinese(); p.say();
Person p = new English(); p.say();
→ 同樣是人,有人說中國話,有人說英國話,這就是多態。
3、實現多態的條件:
① 子類繼承父類;
② 子類重寫父類方法;
③ 父類引用指向子類對象。 // 保證:同一個父類引用類型,使用不同的子類對象實例,而執行不同的操作。
以上便是面向對象的三大特征!
附:
方法重載和方法重寫:
位置 方法名 返回值 參數列表 訪問控制符
override方法重寫: 子類 相同 相同 相同 不能比父類更嚴格
overload方法重載: 本類 相同 無關 不同 無關
註意:由於子類無法繼承父類的私有屬性,因此父類中的private方法無法被重寫。
談面向對象的三大特征