天天看點

類和對象類和對象

類和對象

面向對象概述
  • 所謂對象就是某種事物的抽象(功能),抽象包括資料抽象和過程抽象兩個方面,資料抽象就是定義對象的屬性;過程抽象就是定義對象的操作(行為)。
  • 面向對象的三(四)大特征:封裝,繼承,多态,(抽象)。

    封裝:把描述對象屬性的變量及實作對象功能的方法結合起來,定義一個程式機關,并保證外界不能任意

    更改内部的屬性,不能任意調動内部的方法接口。

    繼承:大大增強了代碼的可複用性,提高了軟體的開發效率,為程式的修改擴充提供了材料。Java 不支援多繼

    承(菱形繼承方式),為了彌補 Java 不支援繼承帶來的子類不能享用多個父類的成員缺憾,我們在後面的學習中會

    引入“接口”這個概念。

    多态:同一個方法名,根據被調對象的不同,實作了不同的行為。

    主要分成靜多态(方法的重載)和動多态(繼承,重寫,向上造型)。

    抽象:使用了關鍵詞abstract聲明的類叫作“抽象類”。如果一個類裡包含了一個或多個抽象方法,類就必須指定成abstract(抽象)。“抽象方法”,屬于一種不完整的方法,隻含有一個聲明,沒有方法主體。

類和對象概述

1. 類的概念

  • 類是一種新的資料類型,類定義資料類型的屬性(變量,字段),行為(方法)。對象是基于類的具體實作,又稱為類的執行個體。
  • 類是一個抽象概念 , 對象是類的具體實作
  • 類所定義的對象是不唯一的,依需求(需要)而定

    例: 定義一個類,人(People)

    按照個體分,對象:姓名,年齡…

class People{                 //類名
	  String name;                //對象(類的屬性)
	  int age;
	}
           

按照人種分,對象:黃種人,白種人…

class People{
      String yellowRace;
      String whiteRace;
   }
           

2. 類的聲明

聲明一個類就是建立一個新的資料類型,而類在java中屬于引用資料類型。java使用關鍵字class來聲明類。類的聲明如下:

[類修飾符] class 類名 [extends 基類] [implements 接口清單]{
	    類體
	}
           

注:

  • 1.“[ ]”意為“可選”

    2.class 關鍵字,首字母小寫

    3.類體:用于定義該類的成員,包括在一對花括号之内,類體可以為空

3. 類的可通路性

類的成員

類中的主要成員:

  1. 屬性(變量)->字段(靜态字段,執行個體字段,常量字段)
  2. 行為(方法)

1. 建立和使用對象

類是抽象的,要使用類定義的功能,必須執行個體化類,即建立類的對象。

1.1 靜态成員

  • 靜态成員一般通過類名來引用:類名.靜态字段名。如果對象直接引用會出現編譯警告。
  • 一個靜态字段共享同一個存儲位置。

1.2 執行個體成員

-執行個體成員必須通過對象執行個體來引用:對象.執行個體字段名。

注:

  • 靜态字段是共有的,不能被對象引用

    執行個體字段是獨有的,不能用類名引用

2. 方法

2.1 構造方法

構造方法用于執行類的執行個體的初始化工作,構造方法又稱為構造函數。建立對象時,根據傳入的參數清單,将調用相應的構造方法。

每個類都有構造方法,如果沒有顯式聲明構造方法,編譯器會自動生成一個預設的無參數的構造方法。

  • 構造方法特征:
    • 構造方法的名稱與類名相同
    • 構造方法不能聲明傳回類型(也不能用void),也不能傳回值
    • 構造方法中,一般不要做對類的執行個體進行初始化以外的事情
    • 構造方法不能通過 “對象.” 來調用。
class People{
	String name;
	int age;
People(String name,int age){         //構造方法(用于初始化)
	this.name=name;
	this.age=age;
}
           

2.2 靜态方法和執行個體方法

  • 使用 static 修飾符聲明的方法為靜态方法,靜态方法不對特定執行個體進行操作,并且隻能通路靜态成員
  • 不使用 static 修飾符聲明的方法為執行個體方法,執行個體方法對類的某個給定的執行個體進行操作,并且能夠通路靜态成員和執行個體成員

2.3 初始化順序

  1. 子類的初始化順序:

    靜态變量–>靜态塊–>執行個體變量–>執行個體塊–>構造方法

  2. 父類與子類的初始化順序

    父類(靜态變量,靜态塊)–>子類(靜态變量,靜态塊)–>父類(執行個體變量,執行個體塊,構造方法)–>子類(執行個體變量,執行個體塊,構造方法)

class T{
    public T(){
        System.out.println("執行個體變量");
    }
}
class StaticT{
    public StaticT(){
        System.out.println("靜态變量");
    }
}
class People2{
    private T name = new T();
    private static StaticT  a = new StaticT();
    //執行個體塊
    {
        System.out.println("執行個體塊");
    }
    //靜态塊
    static {
        System.out.println("靜态塊");
    }
    public People2(){
        System.out.println("構造方法");
    }
}

           
類和對象示例
class People{           //類名
    String name;       //定義類的屬性 
    int age;
    People(String name,int age){    //構造方法
        this.name=name;             //初始化
        this.age=age;
    }
    void eat(){               //方法(行為)    
        System.out.println(name+”在吃飯”);
    }
    Void sleep(){
        Systm.out.println(name+”在睡覺”);
        
    }
    Void hitbean(){
        System.out.println(name+“在打豆豆”);
    }
}
public class Person{
    public static void main(String[] args) {
        People people= new People(“zs”,10); //對象的初始化
        people.eat();           //對象調用方法
        people.sleep();
    }
}
           

繼續閱讀