什麼是面向對象
在日常生活中,人們會關注對象,關注事物信息,關注現實存在的事物的各方面的信息。因此,面向對象,就是從對象的角度出發,根據事物的特徵進行程序設計。
類和對象
類是模子,用來確定對象將會擁有什麼樣的特徵(屬性)和行爲(方法)。
對象是類的實例表現。
類是對象的類型。
對象是特定類型的數據。
對象:用來描述客觀事物的一個實體。
類:具有相同屬性和方法的一組對象的集合。
語法:
//定義類
public class 類名 {
//定義屬性部分
[訪問修飾符] 數據類型 屬性名;
//定義方法部分
[訪問修飾符] 返回類型 方法名(參數) {
}
}
創建並引用對象
類名 對象名 = new 構造方法();
對象名.屬性
對象名.方法名()
屬性和方法
屬性:對象具有的各種靜態特徵。
“對象有什麼”
方法:對象具有的各種動態行爲。
“對象能做什麼”
類和對象的關係
類
類,是一個抽象的概念,我們可以理解爲模板,用於生產實體。
對象
通過模板生成的,一個看得到、摸得着的具體實體。
包名的推薦命名規範
1、英文字母小寫
2、域名的倒序
package com.pino.animal;
package com.pino.animal;
public class Cat {
//成員屬性:暱稱、年齡、體重、品種
String name; //String類型默認值爲null
int month; // int 類型默認值爲0
double weight; //double 類型默認值爲0.0
String species;
//成員方法:跑動、喫東西
public void run() {
System.out.println("小貓快跑");
}
public void eat() {
System.out.println("小貓喫魚");
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//對象實例化
Cat one = new Cat();
//測試
one.eat();
one.run();
System.out.println("暱稱:"+one.name);
System.out.println("年齡:"+one.month);
System.out.println("體重"+one.weight);
System.out.println("品種:"+one.species);
}
}
對象實例化
通過上面的 demo,我們可以總結一下,實例化對象的過程可以分爲兩部分:
聲明對象 Cat one 會在內存的棧空間中開闢一塊區域,取名爲 one ,這個時候 one 指向的內容爲null,我們並不能像真正的對象那樣使用它。
實例化對象 new Cat(); 會在內存的堆空間中開闢一塊區域,完成對象的初始化工作。通過賦值符號(=)把該堆內存地址賦值給變量 one 。
構造方法
也叫構造函數、構造器。
構造方法不能被對象單獨調用,必須配合 new 關鍵字來使用。
注意:
1、構造方法與類同名且沒有返回值。
2、構造方法的語句格式。
public 構造方法名(){
//初始化代碼
}
3、只能在對象實例化的時候調用。
4、當沒有指定構造方法時,系統會自動添加無參的構造方法。
5、當有指定構造方法時,無論是有參、無參的構造方法,都不會自動添加無參的構造方法。
6、一個類中可以有多個構造方法——構造方法重載
無參構造方法
通過下圖,我們可以清晰看到構造方法的格式和注意事項。
成員屬性的初始值
類中的成員屬性,數據類型爲基本類型,且沒有賦值時,默認值如下圖:
package com.pino.animal;
public class Cat {
//成員屬性:暱稱、年齡、體重、品種
String name; //String類型默認值爲null
int month; // int 類型默認值爲0
double weight; //double 類型默認值爲0.0
String species;
public Cat() {
System.out.println("調用了無參構造方法");
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//對象實例化
Cat one = new Cat();
}
}
/** output
調用了無參構造方法
*/
帶參構造方法
this關鍵字
this : 當前對象的默認引用。
this的使用
調用成員屬性,解決成員屬性和局部變量同名衝突。
調用同一個類中的成員方法。
調用重載的構造方法。
package com.pino.animal;
public class Cat {
//成員屬性:暱稱、年齡、體重、品種
String name; //String類型默認值爲null
int month; // int 類型默認值爲0
double weight; //double 類型默認值爲0.0
String species;
public Cat() {
System.out.println("調用了無參構造方法");
}
public Cat(String name, int month, double weight, String species) {
//通過this()調用構造方法必須放在方法體內第一行
this();
this.name = name;
this.month = month;
this.weight = weight;
this.species = species;
}
}
package com.pino.animal;
public class CatTest {
public static void main(String[] args) {
//對象實例化
Cat one = new Cat("樂樂", 3, 11.0, "波斯貓");
System.out.println("暱稱:"+one.name);
System.out.println("年齡:"+one.month);
System.out.println("體重"+one.weight);
System.out.println("品種:"+one.species);
}
}