java-物件導向(二),java-物件導向

來源:互聯網
上載者:User

java-物件導向(二),java-物件導向

    這幾天正在看HeadFirst的時候,突然覺得物件導向的幾個特點,有點理解模糊不清,所以在這再次回顧一下,加深印象。

    上篇部落格(http://blog.csdn.net/u010539352/article/details/39500455)中已經講解了3個物件導向的特點,下面講解剩下的。

    多態:如果一個人想養一個寵物,想養狗就養一條狗,想養一隻貓就養一隻貓,該怎麼實現?那就用到了多態,可以隨機切換,不改動“人”這個類中的代碼,具有動態和靈活性。下面舉例:

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 n,String c) {super(n); eyesColor = c;}  public void enjoy() {    System.out.println("貓叫聲......");  }}class Dog extends Animal {  private String furColor;  Dog(String n,String c) {super(n); furColor = c;}   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 args[]){        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();           //多態,實際New出來的對象的方法,所以是貓的enjoy()方法        l2.myPetEnjoy();           //狗的enjoy()方法    }}
    顯示結果:

   

    解釋:運行期間New出來那個對象,我們就調用誰的方法。運行期間我們New出來的是狗和貓的enjoy方法,所以調用的是貓和狗的enjoy方法。具有動態性。所以運行出來就是女孩養的貓高興了,所以貓的enjoy方法就運行了,結果:貓叫聲…..女孩養的狗高興了,所以貓的enjoy方法就運行了,結果:狗叫聲…..現在如果再加一個鳥,不用改變原來的代碼,直接添加一個類就可以,可擴充性。

    總結如下:當使用多態方式調用方法時,首先檢查父類中是否有該方法,如果沒有則編譯錯誤,如果有再去調用子類的該同名的方法。所以多態必須具備3個條件:要有繼承,要有重寫,父類引用指向子類對象。

   從多態例子可以看出,父類的enjoy方法沒有必要實現,因為子類必須要進行重寫,父類寫了還有點多餘,所以就用到了抽象。

   抽象:用abstract關鍵字修飾。下面舉例:

   

abstract class Animal {                //抽象類別  private String name;  Animal(String name) {this.name = name;}  public abstract void enjoy();        //抽象方法,只有定義沒有實現。} class Cat extends Animal {  private String eyesColor;  Cat(String n,String c) {super(n); eyesColor = c;}  public void enjoy() {    System.out.println("貓叫聲......");  }}class Dog extends Animal {  private String furColor;  Dog(String n,String c) {super(n); furColor = c;}   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 args[]){        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();               }}

    解釋:可以看出來帶有abstract關鍵字的類被定義為了抽象類別,方法被定義為了抽象方法。只有定義沒有實現。在子類中實現。

    所以,抽象類別必須被繼承,抽象方法必須被重寫。

    上面講了繼承,重寫,抽象,多態,用這幾個的結合體可以實現很完美的編程,但是美中不足的是Java裡不能實現多繼承,這裡我們就用到了介面。

    介面:是一種特殊的抽象類別,只包含常量和方法的定義,沒有變數和方法的實現。。幾個不相關的類可以實現同一個介面。一個類可以實現多個介面。相當於多繼承。舉例:

interface Animal {            //介面類public void call(); }interface Animal1 {            //介面類public void run();}class Dog implements Animal {     //狗類實現介面private String name;Dog(String name) {this.name = name;}public void call() {             //實現了介面方法System.out.println("狗叫聲......");}public String getName() {return name;}public void run() {               //實現了介面方法System.out.println("狗跑......");}}class Cat implements Animal {        //貓類實現介面private String name;Cat(String name) {this.name = name;}public void call() {               //實現了介面方法System.out.println("貓叫聲......");}public String getName() {return name;}public void run() {                 //實現了介面方法System.out.println("貓跑......");}}public class Interface {    public static void main(String args[]){        Cat c = new Cat("cat");        Dog d = new Dog("dog");        c.call();        c.run();        d.call();        d.run();                        }}
顯示結果:

    解釋:在介面類中沒有寫方法的實現,但是普通類必須對介面所有的方法進行重寫。

    總結:重寫必須要有繼承。

                        多態必須要有繼承和重寫。

                        抽象必須要有繼承和重寫。用抽象來實現多態。

                        介面必須要有實現。

    這樣總結一遍,思路一下子清晰多了。多多總結沒有壞處。



Java中的物件導向是什?

面對對象就是:
把資料及對資料的操作方法放在一起,作為一個相互依存的整體——對象。對同類對象抽象出其共性,形成類。類中的大多數資料,只能用本類的方法進行處理。類通過一個簡單的外部介面與外界發生關係,對象與對象之間通過訊息進行通訊。程式流程由使用者在使用中決定。
對象即為人對各種具體物體抽象後的一個概念,人們每天都要接觸各種各樣的對象,如手機就是一個對象。
在物件導向的編程方式中,對象擁有多種特性,如手機有高度、寬度、厚度、顏色、重量等特性,這些特性被稱為對象的屬性。對象還有很多功能,如手機可以聽音樂、打電話、發資訊、看電影等工作功能,這些功能被稱為對象的方法,實際上這些方法是一種函數。而對象又不是孤立的,是有父子關係的,如手機屬於電子產品,電子產品屬於物體等,這種父子關係稱為對象的繼承性。在編程中,把所有的問題看做對象,以人的思維方式解決。這種方式非常人性化,對象實際上就是一組資料的集合,並且資料都已經命名。這些資料根據就是對象的屬性,可以被程式訪問。對象還包括很多函數,這些函數被稱為對象的方法,也可以被程式訪問。不過在外部存取對象內的屬性或方法,必須先引用對象,然後用點號訪問對象的屬性和方法

面向過程就是:
自頂向下順序執行,逐步求精;其程式結構是按功能劃分為若干個基本模組,這些模組形成一個樹狀結構;各模組之間的關係儘可能簡單,在功能上相對獨立;每一模組內部均是由順序、選擇和迴圈三種基本結構組成;其模組化實現的具體方法是使用子程式。程式流程在寫程式時就已決定。
 
Java物件導向到底是為何?

面向過程、物件導向是電腦在解決實際問題時的兩種不同的思考方式

面向過程通俗的說就是第一步幹什麼,第二步幹什麼。。。最終目的是讓每一步變得高效,

物件導向就是第一部分幹什麼,第二部分幹什麼。。。最終目的是是把問題劃分為若干個對象,具體怎麼實現並不關心
算一個圓的面積,首先定義變數,然後寫計算方法,輸出結果。這就是面向過程的思想,而物件導向就是定義一個對象圓,它提供了一個方法計算面積
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.