標籤:pre 一個 .com min 經理 gif ora 建立 initial
理解Java物件導向的重要知識點:
一、 類,對象
類?首先舉一個例子:小李設計了一張汽車設計圖,然後交給生產車間來生產汽車,有黑色的、紅色的、白色的... 這裡,汽車設計圖就是我們說的類(class),生產車間就是new構造器(大部分對象都是new出來的),生產出來的汽車就是我們要說的對象。可以說java編程實質就是構建類的過程。
對象?萬物皆對象,宇宙中,如植物,動物,人類,每個個體都是各司其職、各盡所能的。這就要求對象高內聚、低耦合(簡單理解就是人的大腦,它負責思考,想象,記憶,而不能呼吸,排毒,消化食物,從而保證它獨立和高效)。對象具有兩種東西狀態(屬性)和行為(方法),請看下面代碼:
Student.java
1 public class Student { 2 String name; //姓名 3 int age; //年齡 4 String classNo; //班級 5 String hobby; //愛好 6 //輸出資訊方法 7 public void show(){ 8 System.out.println(name + "\n年齡:" + age + "\n就讀於:" + 9 classNo + "\n愛好:" + hobby);10 }11 }
InitialStudent.java
1 public class InitialStudent {2 public static void main(String args[]){3 Student student = new Student(); //建立對象4 student.name = "張浩"; //給對象賦值5 student.age = 10;6 student.classNo = "S1班"; 7 student.hobby = "籃球";8 student.show(); //調用方法9 } }
二、封裝,繼承,多態
封裝?舉個粗俗的比喻,我的移動硬碟存了很多各式各類的資料,但是舍友常常借用,時不時拿我的用(格式化?裝系統?存電影?),這就給我這個擁有者非常大的不便,我就跟他聲明,這個硬碟是我私人的,不能你得按照我允許的方式使用!對象也是這樣,不能隨意的存取內部資料,否則會造成“交叉感染”。所以我們需要封裝:將屬性私人化,提供公有的方法訪問私人屬性。
Adult.java
1 public class Adult { 2 private int age; 3 public int getAge() { 4 return age; 5 } 6 public void setAge(int age) { 7 if (age < 18) { 8 System.out.println("錯誤!最小年齡應為18歲!"); 9 this.age = 18; // 如果不符合年齡要求,則賦予預設值10 }11 else{12 this.age = age;13 }14 }15 16 public String toString() {17 return " [age=" + age + "]";18 }19 }
TestAdult.java
1 public class TestAdult {2 public static void main(String[] args) {3 Adult p1 = new Adult(); 4 p1.setAge(20); //通過seter、geter、toString來對Adult類的私人屬性訪問5 System.out.println(p1.toString()); //增加了資料訪問限制,保證可維護性6 }7 }
繼承?經理覺得小李設計的汽車設計圖非常棒,但是現在推崇新能源,於是需要將引擎改成電能發動機。於是小陳輕而易舉將圖紙中汽油發動機部分改成引擎發動機,再重製一下關係就完成了新圖紙!這就是繼承的作用:是使用已存在的類的定義作為基礎建立新類,新的類可以擁有父類的特點,也可以衍生出更多的特點。這使得複用以前的代碼非常容易,能夠大大縮短開發時間。
Person.java
1 class Person { // 定義人類 2 public String mName; // 姓名 3 public int mAge; // 年齡 4 5 public void dining() { 6 System.out.println("吃飽了..."); 7 } // 吃飯的方法 8 } 9 10 class Student extends Person { // 學生類繼承於人類11 public float mGrade; // 成績12 13 public void examination() {14 System.out.println("考試及格了...");15 } // 考試的方法16 }17 18 class Teacher extends Person { // 教師類繼承於人類19 public float mSalary; // 薪水20 21 public void prelection() {22 System.out.println("上課很累...");23 } // 上課的方法24 }
TestPerson.java
1 public class TestPerson { 2 public static void main(String[] args) { 3 Student std = new Student(); // 執行個體化學生對象 4 std.mName = "李東"; 5 std.mAge = 18; // 為姓名和年齡賦值,訪問的是父類中的成員 6 std.dining(); // 調用吃飯的方法,訪問的是父類中的成員 7 std.examination(); // 調用考試方法,訪問的是子類中的成員 8 9 Teacher teacher = new Teacher(); // 執行個體化教師對象10 teacher.mName = "趙忠祥";11 teacher.mAge = 72;// 為姓名和年齡賦值,訪問的是父類中的成員12 teacher.dining();// 調用吃飯的方法,訪問的是父類中的成員13 teacher.prelection();// 調用考試方法,訪問的是子類中的成員14 }15 }
多態?程式中定義的引用變數所指向的具體類型和通過該引用變數發出的方法調用在編程時並不確定,而是在程式運行期間才確定,即一個引用變數倒底會指向哪個類的執行個體對象,該引用變數發出的方法調用到底是哪個類中實現的方法,必須在由程式運行期間才能決定。因為在程式運行時才確定具體的類,這樣,不用修改來源程式代碼,就可以讓引用變數綁定到各種不同的類實現上,從而導致該引用調用的具體方法隨之改變,即不修改程式碼就可以改變程式運行時所綁定的具體代碼,讓程式可以選擇多個運行狀態,這就是多態性。多態性增強了軟體的靈活性和擴充性。小李喜歡聽小鳥唱歌{麻雀,杜鵑,鸚鵡}
小李:窗外的鳥兒,給我唱首歌。
1.(鳥 bird = new 麻雀 )?
2.(鳥 bird = new 杜鵑 )?
3.(鳥 bird = new 鸚鵡 )?
鳥兒:bird.sing()~~~~~
小李:鳥兒唱的不錯,你是哪種鳥?
鳥兒: bird.shape()
小李:(---如果上面藍字定義的是3,是鸚鵡)哈哈!原來你是鸚鵡!
所以,多態的過程實質是一個抽象指令,讓一組具有相同行為單具有不同內容的個體協同工作的這樣的一個過程。
【Java學習筆記之十三】初探Java物件導向的過程及代碼實現