Java是一個面向對象的語言。對程序員來說,這意味着要注意應中的數據和操縱數據的方法(method),而不是嚴格地用過程來思考。以下是關於計算機二級Java語言程序設計複習資料,希望大家認真閱讀!
Java面向對象
面向對象是一種程序設計方法,或者是程序設計規範,其基本思想是使用對象、類、繼承、封裝、多態等基本概念來進行程序設計。 面向對象是一種符合人們思考習慣的思想,可以將複雜的事情簡單化,將程序員從執行者轉換成了指揮者
完成需求時:
• 先要去找具有所需的功能的對象來用。
• 如果該對象不存在,那麼創建一個具有所需功能的對象。
• 這樣簡化開發並提高代碼的複用。
面向對象的開發過程其實就是不斷的創建對象,使用對象,指揮對象做事情。設計的過程其實就是在管理和維護對象之間的關係。
面向對象的特徵:
• 封裝(encapsulation)
• 繼承(inheritance)
• 多態(polymorphism)
1.封裝
概念:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。
好處:• 將變化隔離。• 便於使用。• 提高重用性。• 提高安全性。
封裝原則:
• 將不需要對外提供的內容都隱藏起來。
• 把屬性都隱藏,提供公共方法對其訪問。
Java中可以透過對類的成員設定一定的訪問權限,實現類中成員的資訊隱藏。
private:類中限定爲private的成員,只能被這個類本身訪問。如果一個類的構造方法聲明爲private,則其它類不能生成該類的一個實例。
default:類中不加任何訪問權限限定的成員屬於缺省的(default)訪問狀態,可以被這個類本身和同一個包中的類所訪問。
protected:類中限定爲protected的成員,可以被這個類本身、它的子類(包括同一個包中以及不同包中的子類)和同一個包中的所有其他的類訪問。
public:類中限定爲public的成員,可以被所有的類訪問。
如下面的這個student類,就是使用了封裝,將類中的屬性name 、age和score私有化,使外部不能直接訪問他們,只能透過public類型的對他們方法進行操作。
class Student {
private String name;//聲明屬性 ,並設爲私有類型,起到封裝的作用
private int age;
private int score;
public Student(String name,int age ,int score) { //構造函數,分別給name、age、score賦值
= name;// :this代本類對象的引用
= age;
e= score;
}
public String getName() { //設定getter方法,因爲變量設爲了私有,對象無法訪問類中的屬性,需要用getter方法獲取變量
return name;
}
public void setName(String name) { //設定setter方法,因爲變量設爲了私有,對象無法訪問類中的屬性,需要用setter方法給變量賦值
= name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
= age;
}
public int getScorre() {
return score;
}
public void setScorre(int score) {
e = score;
}
}
2.繼承
繼承是一種聯結類的層次模型,並且允許和鼓勵類的重用,它提供了一種明確表述共性的方法。對象的一個新類可以從現有的類中派生,這個過程稱爲類繼承。
新類繼承了原始類的特性,新類稱爲原始類的派生類(子類),而原始類稱爲新類的.基類(父類)。派生類可以從它的基類那裏繼承方法和實例變量,並且類可以修改或增加新的方法使之更適合特殊的需要。
子類可以直接訪問父類中的非私有的屬性和行爲。透過 extends 關鍵字讓類與類之間產生繼承關係。如下:class SubDemo extends Demo{}
繼承提高了代碼的複用性。
繼承的出現讓類與類之間產生了關係,提供了多態的前提
繼承的特點:
Java只支援單繼承,不支援多繼承。
• 一個類只能有一個父類,不可以有多個父類。
• class SubDemo extends Demo{} //這是對的
• class SubDemo extends Demo1,Demo2...//這是錯的
Java支援多層繼承(繼承體系)
• class A{}
• class B extends A{}
• class C extends B{}
定義繼承需要注意:
• 不要僅爲了獲取其他類中某個功能而去繼承
• 類與類之間要有所屬關係,xx1是xx2的一種。
如:
class Ren { //父類
int age=20;
String name="wk";
public void show() {
tln("姓名:"+name+" 年齡:"+age);
}
}
class Sudents extends Ren {//子類Sudents繼承了父類Ren
int score=90;//增加了新的屬性
int age= +1;//使用super標記父類中的元素,修改了Ren中age的值
public void show() {//重寫了父類中的方法( 覆蓋時,子類方法權限一定要大於等於父類方法權限,靜態只能覆蓋靜態。)