面向對象(一):面向對象的概述,類和對象的關係,構造方法以及構造方法的重載

面向對象的概述

面向對象是一種符合人類思維習慣的編程思想。在程序中使用對象來映射現實中的事物,使用對象的關係來描述事物之間的聯繫,這種思想就是面向對象。面向對象是把構成問題的事物按照一定規則劃分爲多個獨立的對象,然後通過調用對象的方法來解決問題。當然,一個應用程序會包含多個對象,通過多個對象的相互配合即可實現應用程序所需的功能。
面向對象的三個特點是:封裝,繼承,多態

  • 封裝

    封裝是面向對象的核心思想,將對象的屬性和行爲封裝起來,不需要讓外界知道具體實現細節,這就是封裝思想

  • 繼承

    繼承主要描述的就是類與類之間的關係,通過繼承,可以在無需重新編寫原有類的情況下,對原有類的功能進行拓展。繼承不僅增強了代碼的複用性,提高了開發效率,還爲程序的維護補充提供了便利。

  • 多態

    多態指的是在一個類中定義的屬性和方法被其他類繼承後,當把子類對象直接賦值給父類引用變量時,相同引用類型的變量調用同一個方法所呈現出多種不同的行爲特性,不同的對象所表現出的行爲是不一樣的

值傳遞和引用傳遞

值傳遞

package com.wang.oop;

//值傳遞
public class Demo1 {
    public static void main(String[] args) {
        int a = 1;
        System.out.println(a);

        System.out.println("=============");

        //調用方法
        change(a);
        System.out.println(a);
    }

    //定義一個方法,返回值爲空
    public static void change(int a) {
        a = 10;
    }
}

引用傳遞

package com.wang.oop;

//引用傳遞:對象,本質還是值傳遞
public class Demo2 {
    public static void main(String[] args) {

        Person person = new Person();
        System.out.println(person.name);//null

        System.out.println("===============");

        change(person);
        System.out.println(person.name);//哈哈
    }


    public static void change(Person person) {
        person.name = "哈哈";
    }

}

//定義了一個Person類,有一個屬性:name
class Person {
    String name;//null
}

類和對象

​ 類是一種抽象的數據類型,它是對某一類事物整體描述,但不能代表某一個具體的事物。類是對某一類事物的抽象描述,而對象用於表示現實中該事物具體的個體,也就是實例化

​ 類是對象的抽象,他用於描述一組對象的共同特徵和行爲。以面向對象的編程思想,將某一類中共同的特徵和行爲封裝起來,把共同特徵作爲類的屬性(也叫成員變量),把共同行爲稱作類的方法(也叫成員方法)。

Java中的類是通過class關鍵字定義的:
	修飾符 class 類名 {
        //類體,包括類的成員變量和成員方法
    }

修飾符可以是public,也可以不寫(默認),類名首字母要大寫,要符合命名規範。大括號{}的內容是類體,是需要在類中編寫的內容,主要包括成員變量和成員方法。
類的成員變量(屬性)的格式:
	修飾符 數據類型 變量名;
	
類的成員變量也稱作類的屬性,用於描述對象的特徵。修飾符爲可選項,用於指定變量的訪問權限其值可以是public,private。變量可以賦初始值,也可以不賦值。

對象

Java程序中可以使用 new 關鍵字來創建對象,格式:
    類名 對象名 = new 類名();
	Person person = new Person();

"new Person()"用於創建Person類的一個實例對象,"Person person"則是聲明瞭一個Person類型的變量person,
中間的等號將 Person 對象在內存中的地址賦值給變量person,這樣變量person就持有了對象的引用。在創建Person對象時,程序會佔用兩塊內存區域,棧內存和堆內存。Person類型的變量person被存放在棧內存中,它是一個引用,會指向真正的對象;通過 new Person() 創建的對象則放在堆內存中,這纔是真正的對象。可以通過"對象名.屬性名"的方式來訪問對象的屬性或給屬性賦值。
package com.wang.demo;

//主程序
public class Application {
    public static void main(String[] args) {
        /*
        * 使用 new 關鍵字創建對象,也就是Student類的實例化
        * */
        Student stu1 = new Student();
        Student stu2 = new Student();

        /*
        * 在沒有對類中的屬性賦值時,會有默認值
        * */
        System.out.println(stu1.name);//null
        System.out.println(stu2.age);//0

        System.out.println("==============");

        //使用 "對象名.屬性"的方式給屬性賦值
        stu1.name = "小明";
        stu1.age = 10;
        stu2.name = "小紅";
        stu2.age = 10;

        System.out.println(stu1.name + stu1.age + "歲");
        System.out.println(stu2.name + stu2.age + "歲");

        //使用 "對象名.方法名"的方式調用類中的方法
        stu1.study();
        stu2.study();
    }
}

=======================================================================
    
package com.wang.demo;

/**
 * 定義一個Student類,
 * 類中只允許有屬性和方法
 */
public class Student {
    //屬性:也可以稱爲字段
    String name;//null
    int age;//0

    //方法
    public void study() {
        System.out.println(name + "在學習!");
    }
}

構造器

​ 如果在實例化對象的同時就爲這個對象的屬性進行賦值,可以通過構造器實現。構造器,也叫構造方法,它在類實例化對象的時候被自動調用。

構造器的語法格式:
    修飾符 方法名(參數列表) {
    	//方法體
	}
定義構造器的時候要同時滿足以下條件:
    1.方法名必須與類名相同
    2.在方法名的前面沒有返回值類型的聲明,void也不能寫
    3.在方法中不能使用return語句返回一個值,但是可以單獨寫return語句作爲方法的結束
    
構造器的作用:
    1.使用 new 關鍵字實例化(創建)對象
    2.可以對屬性進行初始化賦值
    
快捷鍵:Alt + Insert

​ 在一個類中除了可以定義無參數的構造方法外,還可以定義有參數的構造方法,通過有參數的構造方法就可以實現對屬性的賦值。在類中,程序會隱式的聲明一個默認的無參構造方法,但是,若我們定義有參構造,那麼無參構造就會被覆蓋,我們必須要再顯式的聲明一個無參構造方法。

package com.wang.demo1;

//主方法
public class Application {
    public static void main(String[] args) {
        //使用 new 關鍵字實例化了一個對象
        Person person = new Person("哈哈");

        System.out.println(person.name);
    }
}

=============================================
    
package com.wang.demo1;

public class Person {
    //一個類中默認有一個隱式的無參構造

    String name;

    /*
      無參構造方法
      1.使用new關鍵字實例化對象
      2.
    */
    public Person() {

    }

    /*
    * 有參構造
    * 一旦定義了有參構造,無參構造就必須顯式的定義
    * */
    public Person(String name) {
        this.name = name;
    }
}

構造方法的重載

​ 與普通方法一樣,構造方法也可以重載,在一個類中可以定義多個構造方法,只要每個構造方法的參數類型或參數個數不同即可。在創建對象時,可以通過調用不同的構造方法,來爲不同的屬性進行賦值。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章