轉行學Java的第7天:瞭解面向對象

我是張騷年,量子玄學信徒,祖安衝浪王者,B站白嫖大師,撕少保護協會資深會員,一個沒有感情的表情包機器。java

應屆二本物理找不到工做,準備用五個月轉行Java」上流社會「程序員

脫髮日記

學習面向對象的第一天,在網上看到一個段子:程序員是不缺對象的,沒有什麼對象是一個new解決不了的,若是有,就多new幾個。
我撓了撓頭,程序員路子都這麼野的嗎?
編程

今日學習目標

瞭解什麼面向對象 markdown

今日學習難點

理解面向對象

學習筆記 重點總結

什麼是面向對象

計算機中的對象 : 複雜的客觀事物在java程序中的表現形式。
在計算機眼中,一切都是對象。
舉個例子:函數

描述一個對象:以水杯爲例oop

  • 名稱、材料、顏色、大小  ------外在特徵
  • 除了有特徵,還具備保溫功能能幹什麼  -------所具備的功能
  • 在描述的時候 除了描述特徵、還須要描述功能

描述一我的 應該怎麼描述學習

  • 身高、體重、年齡、衣服顏色
    • 對應的是數據,表明對象有什麼特徵、外在特色
    • 程序中以變量體現,稱爲對象的屬性
  • 吃飯、睡覺、喝水、唱歌
    • 對應的是行爲和功能,表明對象能作什麼
    • 程序中以函數體現,函數之後統稱爲方法,稱爲對象的方法


經過面向對象能夠在Java中模擬客觀是的事物:測試

  • 經過屬性模擬 事物的數據
  • 經過方法模擬 事物的行爲和功能


總結this

  1. 計算機的需求來源於客觀世界
  2. 現實世界的對象:客觀存在的事物
  3. 計算機中的對象:JVM的一個連續的存儲空間,表明現實世界中一個對應的對象

面向對象語法細節—類

類:保存了一類對象的信息,定義了對象的屬性和方法【對象的模板】
類的組成:spa

  • 屬性(實例變量)類的內部 方法的外部
    • 實例變量都有默認值
    • 做用範圍:至少在整個類的內部
    • 實例變量做用範圍內實例變量不能有命名衝突,能夠和局部變量衝突,局部變量優先
  • 實例方法 表明對象可以作什麼
    • 方法的聲明 可以作神門
    • 方法的實現 方法體 怎麼作
    • 聲明組成:修飾符,返回值類型,方法名(形參列表) 可拋出的異常
    • 實例方法的執行必須依賴一個對象,執行過程當中從執行方法的對象中獲取實例變量

public class Day07 {
public static void main(String[] args) {
複製代碼

// 建立對象經過new Dog dog = new Dog();

// 給狗的屬性賦值 dog.name = "hhh"; dog.age = 18;

// 調用狗的方法 dog.eat(); } }

class Dog{ // 定義屬性 狗的名字 String name; // 狗的年齡 int age;

複製代碼public static void main(String[] args) { 複製代碼// 定義方法 public void eat(){ System.out.println("狗能夠吃"); } }

面向對象的開發方式:

  1. 定義類
  2. 建立對象
  3. 使用對象的實例變量和實例方法完成需求

方法重載

在一個類中,同一種功能可能會有多種表現形式。
例如:人的吃功能,對於不一樣的東西有不一樣的吃方式,吃藥、吃飯、吃口香糖
所以在一個類中,寫吃方法的時候,也會存在實現方式的差別。也就是方法名字相同 可是實現不一樣
這樣的作法稱之爲方法的重載

方法的重載:在一個類中定義多個方法名相同,參數列表不一樣的方法
參數列表不一樣的狀況有:

  1. 形參類型不一樣
  2. 形參數量不一樣
  3. 形參順序不一樣

注意:形參名不一樣,不算形參列表不一樣,不構成重載

使用的時候根據外界傳入的實參來匹配對應的方法
編譯器根據調用者傳遞的實際參數,肯定調用哪個方法
編譯器根據參數匹配方法時,先進行精確匹配,若是匹配不成功,則就近向上匹配,可是注意避免混淆的現象

public class Day07 {

    public static void main(String[] args) {
//        建立對象經過new
        Dog dog = new Dog();

//        給狗的屬性賦值
        dog.name = "hhh";
        dog.age = 18;


//        調用狗的方法
        dog.eat();
//        調用重載的方法
        dog.eat("骨頭");
    }
}


class Dog{
//    定義屬性 狗的名字
    String name;
//    狗的年齡
    int age;

//    定義方法
    public void eat(){
        System.out.println("狗能夠吃");
    }
//    重載的方法
    public void eat(String food){
        System.out.println("狗能夠吃"+food);
    }
}
複製代碼

構造方法

構造方法:類的內部除了有屬性、方法  還有一個構造方法,構造方法 仍是方法,只是比較特殊
構造方法的特色:

  1. 類之內 其餘方法之外
  2. 構造方法的方法名必須和類名徹底一致
  3. 構造方法沒有返回值類型(連void都沒有)
  4. 構造方法是在建立對象時,只能和new連用,不能手動調用,JVM會自動調用一次
  5. 構造方法容許重載
  6. 建立對象時候 構造方法一般能夠爲屬性賦值
  7. 若是一個類中沒有定義任何的構造方法,則JVM會自動添加一個默認公開、無參構造方法;可是若是類中定義了其餘有參構造方法,則JVM再也不提供默認公開無參數的構造方法
public class Day07 {

    public static void main(String[] args) {
//        建立對象經過new  使用構造方法建立對象
        Dog dog = new Dog();

//        使用有參構造方法建立對象
        Dog kkk = new Dog("kkk"23);
//        給狗的屬性賦值
        dog.name = "hhh";
        dog.age = 18;


//        調用狗的方法
        dog.eat();
//        調用重載的方法
        dog.eat("骨頭");
    }
}


class Dog{
//    定義屬性 狗的名字
    String name;
//    狗的年齡
    int age;

//    定義方法
    public void eat(){
        System.out.println("狗能夠吃");
    }
//    重載的方法
    public void eat(String food){
        System.out.println("狗能夠吃"+food);
    }
//    無參構造方法
    public Dog() {
    }
//    兩個參數的構造方法
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
複製代碼

對象的建立過程

一個對象的建立 不是一蹴而就的。有步驟的,第一步幹啥,第二步幹啥 第三步幹啥

對象建立的觸發點:使用new關鍵字建立對象

  1. 分配空間
  2. 爲屬性賦默認值
  3. 屬性都有默認數據,本身沒法選擇
  4. 初始化屬性
  5. 爲屬性第二次賦值
  6. 不爲屬性賦初始值,第二步就沒有了寫了纔有
  7. 調用構造方法
  8. 爲屬性第三次賦值
  9. 一樣還能夠經過對象名.屬性名 來爲屬性賦值

今日學習名詞

名詞 含義
overload 重載
class

今日學習總結

image.png
image.png

每日習題

編程:設計一個 Worker 類 和 Address 類,類的要求以下:

  1. 定義一個 Worker 類,類中定義三個屬性:姓名、年齡、工資(salary),要求以下:
  2. 提供公開無參構造方法和三個參數的構造方法
  3. 定義無參的 work 方法和帶整數參數 work(int hours)方法,參數表明工人工做的小時數
  4. 定義一個 Address 類,類中定義屬性:地址(addr)、郵編(zipCode),爲此類提供無參數和有 參數的構造方法。
  5. 爲 Worker 類添加一個 Address 類型的屬性 address
  6. 定義一個測試類,建立一個 Worker 對象,其姓名爲張3、年齡爲 2六、工資爲 10000.0;家庭地址爲:北京市海淀區清華園 1 號院、郵編爲 100010
public class Test17 {
    public static void main(String args[]) {
        Worker w = new Worker("zhangsan"2610000.0);
        Address addres = new Address("北京市海淀區清華園1號院""100010"); w.address = addres;
    } 
}
//工人類
class Worker {
    String name;//姓名
    int age;//年齡
    double salary;//工資
    Address address;//地址(屬性的類型是Address類型)
    
    public Worker() {
        
    }
    public Worker(String name, int age, double salary) this.name = name;
        this.age = age;
        this.salary = salary;
    }
    public void work() { System.out.println("work");
    }
    public void work(int hours) {
        System.out.println("worker works for " + hours + " hours");
    } 
}
//地址類
class Address {
    String address;
    String zipCode;
    public Address() {
    }
    public Address(String address, String zipCode) 
        this.address = address;
        this.zipCode = zipCode;
    } 
}
複製代碼
相關文章
相關標籤/搜索