談談對面向物件程式設計的認識
阿新 • • 發佈:2019-02-05
面向物件程式設計有三大特性:封裝性、繼承性、多型性。
1,所謂的面向物件就是將我們的程式模組化、物件化,把具體事物的特性屬性和通過這些屬性來實現一些動作的具體方法放到一個類裡面,這就是封裝。
例項程式碼如下:
程式執行結果:class Person{ private String name; //宣告姓名屬性 private int age; //宣告年齡屬性 public void tell(){ System.out.println("姓名"+getName()+",年齡:"+getAge()); } 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; } } public class Test002 { public static void main(String[] args) { Person person = new Person(); //宣告並例項化物件 person.setName("王二"); //呼叫setter設定姓名 person.setAge(20); //呼叫setter設定年齡 person.tell(); //輸出資訊 } }
姓名王二,年齡:20
2,繼承有點類似於我們生物學上的遺傳,就是子類的一些特徵是來源於父類的,兒子遺傳了父親和母親的一些性格,或者相貌等。
面向物件裡的繼承也就是父類的相關的屬性,可以被子類重複使用,子類不必再在自己的類裡面重新定義一回,父類裡有點我們只要拿過來用就好了。而對於自己類裡面需要用到的新的屬性和方法,子類就可以自己來擴充套件了。當然,會出現一些特殊情況,就是我們在有一些方法在父類已經定義好了,但是子類我們自己再用的時候,發現了問題。比如,我們的雖然都是計算工資的,但是普通員工的工資計算方法跟經理的計算方法是不一樣的,所以這個時候,我們就不能直接呼叫父類的這個計算工資的方法了。 例項程式碼如下:程式執行結果:class Person{ //定義Person類 private String name; //定義name屬性 private int age; //定義age屬性 public String getName() { //取得name屬性 return name; } public void setName(String name) { //設定name屬性 this.name = name; } public int getAge() { //取得age屬性 return age; } public void setAge(int age) { //設定age屬性 this.age = age; } } class Student extends Person{ //Student是Person的子類 //該處任何程式碼都不編寫 } public class Test003 { public static void main(String[] args) { Student student = new Student(); student.setName("王二"); //呼叫setter設定姓名 student.setAge(30); //呼叫setter設定年齡 System.out.println("姓名:"+student.getName()+",年齡:"+student.getAge()); } }
姓名:王二,年齡:30
3,這個時候我們就需要用到面向物件的另一個特性:多型性。我們要在子類裡面把父類裡面定義計算工資的方法在子類裡面重新實現一遍。多型包含了過載和重寫。重寫很簡單就是把子類從父親類裡繼承下來的方法重新寫一遍,這樣,父類裡相同的方法就被覆蓋了,當然啦,你還是可以通過super.CaculSalary方法來呼叫父類的工資計算方法。而過載就是類裡面相同方法名,不同形參的情況,可以是形參型別不同或者形參個數不同,或者形參順序不同,但是不能使返回值型別不同。 例項程式碼如下:
class Person{ public void fun1(){ System.out.println("---fun1()我是來自父類的Person"); } public void fun2(){ System.out.println("---fun2()我是來自父類的Person"); } } //Student類擴充套件自Person類,也就繼承了Person類中的fun1()、fun2()方法 class Student extends Person{ //在這裡覆蓋了Person類中的fun1()方法 public void fun1(){ System.out.println("---fun1()我是來自子類的Student"); } public void fun3(){ System.out.println("---fun3()我是來自子類的Student"); } } public class Poly { public static void main(String[] args) { //此處父類物件由子類例項化 Person p = new Student(); //呼叫fun1()方法,觀察此處呼叫時哪個類裡的fun1()方法 p.fun1(); p.fun2(); } }
程式執行結果:
---fun1()我是來自子類的Student
---fun2()我是來自父類的Person