九天學會Java,第八天,面向對象

  • 變量和數據類型,賦值和輸出
  • 算術運算
  • 選擇結構
  • 循環結構
  • 函數定義,函數調用
  • 變量做用域
  • 棧,程序運行的基石
  • 面向對象 <---
  • 異常處理
  • 語言提供的公用包

爲何要有面向對象編程,由於萬物皆是對象。java

對象是咱們描述/建模現實世界的最佳工具。編程

面向對象是一種思想,將功能封裝進對象,強調具有了功能的對象。函數

舉個例子:小汽車是一個對象沒問題吧,這個對象有底盤,輪胎,車身,中控等屬性。
除此以外,這個對象還具有一些動做,如前進,後退,轉彎。工具

你看,用面向對象來描述世間萬物是否是特別地流暢易懂。this

說到面向對象,要澄清兩個概念,一個是「類」,一個是「實例」。code

類是具備相同特性和行爲的對象集合,是一個抽象定義。對象

好比人類就是一個類,而實例是以類爲模板,生成有意義的實體。作用域

好比你,我,他都是人類的一個實例,這麼類比應該好理解了吧。字符串

先記住類的定義怎麼寫,參考下面僞代碼:面向對象編程

class 類名{

    數據類型  屬性 ;
    ….                           
 
    public 返回值的數據類型 方法名稱(參數1,參數2…){
        程序語句 ;    
         [return 表達式;]
    }
}

類名

類名告訴計算機,咱們對某一類事物進行了抽象,把共同的屬性和行爲提取出來,請看圖:

image

image

第一隻小黃貓,第二隻小奶貓沒問題吧。如今咱們把它們都抽象成貓類,都有四肢,尾巴,能跑能吃。

此後,咱們就有了貓類這個概念。若是還不能理解,請給我留言。

在src目錄右鍵,New -> Java Class

輸入Cat做爲類名

/** Cat.java 文件
* 類名,Cat
* 這個類裏什麼都沒定義
*/
public class Cat {

}

以上代碼即定義了一個類,類名叫Cat

實例

前面提到的黃貓,奶貓都是貓類的實例。實例不是一個抽象概念,而是一個具體的物體。

在src目錄右鍵,New -> Java Class

輸入SeventhLessonOO

public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一個實例,該變量的名字叫milkCat
         */
        Cat milkCat = new Cat();
    }
}

Cat.java 和 SeventhLessonOO.java 都在src目錄下

以上代碼即實例化了一隻奶貓。

構造函數

Java根據構造函數來生成實例。

爲了舉例說明構造函數怎麼使用,修改Cat.java以下

public class Cat {
    private String name;  /* (1) 爲了說明構造函數,咱們修改Cat的定義,加入name成員變量 */
    /**
    * 這就是構造函數,這個函數沒有返回值,也不須要在public後面寫void
    * 記住這個語法規則
    */
    public Cat(String name) {
        this.name = name; /* this關鍵字表示當前實例自己 */
        /*
        * 上面這句話的意思時,函數參數name的值,賦值給實例自己的name,即(1)處定義的private String name;
        */
    }
}

如何調用構造函數

public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一個實例,該變量的名字叫milkCat
         * 因爲咱們聲明瞭構造函數,則必須使用構造函數
         * 傳入一個字符串參數
         * "I m milkCat 會傳遞給參數name
         */
        Cat milkCat = new Cat("I m milkCat");
    }
}

以上就是調用構造函數的過程,若是還寫new Cat();會報錯。

由於咱們已經聲明瞭構造函數,那麼就要按構造函數的定義來生成實例。

成員變量

咱們說過,貓這個類,有四肢,有尾巴。如今咱們再次修改類的定義

加入body成員變量

public class Cat {
    private String name;  /* (1) 爲了說明構造函數,咱們修改Cat的定義,加入name成員變量 */
    private String body; /* 新加了body成員變量 */
    /**
     * 這就是構造函數,這個函數沒有返回值,也不須要在public後面寫void
     * 記住這個語法規則
     * 
     * 新加了body參數
     */
    public Cat(String name, String body) {
        this.name = name; /* this關鍵字表示當前實例自己 */
        /*
        * 上面這句話的意思時,函數參數name的值,賦值給實例自己的name,即(1)處定義的private String name;
        */
        this.body = body;
    }
}

成員函數

成員函數能夠類比成這個類能夠有什麼動做。貓能夠叫,能夠跑

爲了更好地直觀感覺成員函數,咱們修改Cat這個類,讓Cat這個類能夠畫一隻貓

修改Cat.java

public class Cat {
    private String name;  /* (1) 爲了說明構造函數,咱們修改Cat的定義,加入name成員變量 */
    private String body; /* 新加了body成員變量 */
    /**
     * 這就是構造函數,這個函數沒有返回值,也不須要在public後面寫void
     * 記住這個語法規則
     *
     * 新加了body參數
     */
    public Cat(String name, String body) {
        this.name = name; /* this關鍵字表示當前實例自己 */
        /*
        * 上面這句話的意思時,函數參數name的值,賦值給實例自己的name,即(1)處定義的private String name;
        */
        this.body = body;
    }

    /**
     * 定義一個成員函數
     * 經過System打印地方式輸出貓的字符樣子
     */
    public void drawMyself() {
        System.out.println("Ooooo I am " + this.name);
        System.out.println(body);
    }
}

修改main函數

public class SeventhLessonOO {
    public static void main(String[] args) {
        /**
         * 新建一個實例,該變量的名字叫milkCat
         * 因爲咱們聲明瞭構造函數,則必須使用構造函數
         * 傳入一個字符串參數
         * "I m milkCat 會傳遞給參數name
         */
        String body =
                          "  A_A"  + "\n"
                        + " (-.-)" + "\n"
                        + "  |-|"  + "\n"
                        + " /   \\" + "\n"
                        + "|     |  __" + "\n"
                        + "|  || | |  \\___" + "\n"
                        + "\\_||_/_/\n";
        Cat milkCat = new Cat("I m milkCat", body);
        /**
         * 這句話讓實例自己,調用成員函數,即
         * 小奶貓把本身"畫"出來
         */
        milkCat.drawMyself();
    }
}

程序輸出:

Ooooo I am I m milkCat
  A_A
 (-.-)
  |-|
 /   \
|     |  __
|  || | |  \___
\_||_/_/

是否是有點意思

相關文章
相關標籤/搜索