JavaSE入門學習24:Java物件導向補充

來源:互聯網
上載者:User

JavaSE入門學習24:Java物件導向補充
一Java中的Object類

Object類是所有Java類的父類,如果一個類沒有使用extends關鍵字明確標識繼承另外一個類,那麼這個類預設

繼承Object類。

public class Person{      //}//等價於public class Person extends Object{     //}

Object類中的方法,適合所有子類。

1)toString()方法

在Object類中定義有public String toString()方法,其傳回值是String類型,描述當前對象的有關資訊,在進行

String與其類型資料的串連操作時(如:System.ouy.println("info"+person)),將自動調用對象類的toString()方法。也可

以根據需要在使用者自訂類型中重寫toString()方法

執行個體:

public class Test{public static void main(String[] arge){Dog d = new Dog();System.out.println(d);System.out.println("d:"+d);System.out.println("d:"+d.toString());}}class Dog{public String toString(){return "I am a dog";}}

運行結果:

2)equals()方法

比較的是對象的引用是否指向同一塊記憶體位址。一般情況下比較兩個對象時比較它們的值是否一致,所以要進行

重寫。

Object類中定義有:public boolean equals(Object obj)方法提供定義物件類型

執行個體:

public class Test{public static void main(String[] arge){                String s1 = new String("hello");String s2 = new String("hello");System.out.println(s1 == s2);//比較對象的地址System.out.println(s1.equals(s2));//比較對象的內容        }}

運行結果:

二對象轉型(casting)

一個基類的參考型別變數可以指向其子類的對象;

一個基類的引用不可以訪問其子類對象新增的成員(屬性和方法);

可以使用 引用變數 instanceof 類名 來判斷該引用型變數所指向的對象是否屬於該類或該類的子類。

子類的對象可以當作基類的對象來使用稱作向上轉型(upcasting),反之稱為向下轉型(downcasting)。

向上轉型是基類或父類的引用指向子類對象。

這個在前面的例子中我們遇到很多,這裡就不再多說,可以參考:JavaSE入門學習18:Java物件導向之多態。

三動態綁定(池綁定)與多態

動態綁定是指在執行期間(而非編譯期)判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。

下面例子中,根據Lady對象的成員變數pet所引用的不同的實際類型而調用相應的enjoy()方法。也就是你new的是

那個類型調用的就是該類型的enjoy()方法

執行個體代碼:

class Animal{private String name;//構造方法Animal(String name){this.name = name;}public void enjoy(){System.out.println("叫聲......");}}class Cat extends Animal{private String eyesColor;//構造方法Cat(String name,String eyesColor){//調用父類的建構函式super(name);this.eyesColor = eyesColor;}//重寫父類Animal的enjoy()方法public void enjoy(){System.out.println("貓叫聲......");} }class Dog extends Animal{private String furColor;//構造方法Dog(String name,String furColor){//調用父類的構造方法super(name);this.furColor = furColor;}//重寫父類Animal的enjoy()方法public void enjoy(){System.out.println("狗叫聲......");} }class Lady{private String name;//參考型別變數成員private Animal pet;//建構函式Lady(String name,Animal pet){this.name = name;this.pet = pet;}public void myPetEnjoy(){pet.enjoy();}}public class Test{public static void main(String[] arge){Cat c = new Cat("catname","blue");Dog d = new Dog("dogname","black");Lady l1 = new Lady("l1",c);Lady l2 = new Lady("l2",d);l1.myPetEnjoy();l2.myPetEnjoy();}}

運行結果:

對於可擴充性的理解:

改寫上述的例子:

添加一個Bird類:

class Bird extends Animal{//構造方法Bird(){//調用父類的構造方法super("bird");}//重寫父類Animal的enjoy()方法public void enjoy(){System.out.println("鳥叫聲......");} }

改寫main方法:

public class Test{public static void main(String[] arge){Cat c = new Cat("catname","blue");Dog d = new Dog("dogname","black");Bird b = new Bird();Lady l1 = new Lady("l1",c);Lady l2 = new Lady("l2",d);Lady l3 = new Lady("l3",b);l1.myPetEnjoy();l2.myPetEnjoy();l3.myPetEnjoy();}}

運行結果:

多態特性對於系統可擴充性的重要性

繼續改寫鳥類:

class Bird extends Animal{private String featherColor;//構造方法Bird(String name,String featherColor){//調用父類的構造方法super(name);this.featherColor = featherColor;}//重寫父類Animal的enjoy()方法public void enjoy(){System.out.println("鳥叫聲......");} }

改寫mian方法:

 

public class Test{public static void main(String[] arge){Lady l4 = new Lady("l4",new Bird("birdname","green"));l4.myPetEnjoy();}}

運行結果:

多態的條件:

1)要有繼承

2)要有重寫

3)父類引用指向子類對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.