類和對象
面向對象概述
- 所謂對象就是某種事物的抽象(功能),抽象包括資料抽象和過程抽象兩個方面,資料抽象就是定義對象的屬性;過程抽象就是定義對象的操作(行為)。
-
面向對象的三(四)大特征:封裝,繼承,多态,(抽象)。
封裝:把描述對象屬性的變量及實作對象功能的方法結合起來,定義一個程式機關,并保證外界不能任意
更改内部的屬性,不能任意調動内部的方法接口。
繼承:大大增強了代碼的可複用性,提高了軟體的開發效率,為程式的修改擴充提供了材料。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. 建立和使用對象
類是抽象的,要使用類定義的功能,必須執行個體化類,即建立類的對象。
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 初始化順序
-
子類的初始化順序:
靜态變量–>靜态塊–>執行個體變量–>執行個體塊–>構造方法
-
父類與子類的初始化順序
父類(靜态變量,靜态塊)–>子類(靜态變量,靜态塊)–>父類(執行個體變量,執行個體塊,構造方法)–>子類(執行個體變量,執行個體塊,構造方法)
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();
}
}