什麼是對象呢?
簡單來說我們自己就是一個對象,一人。
一個蘋果,一條小魚,一匹馬兒,都是一個對象
對象呢又有自己的特征 比如我們自己,有眼睛 姓名,這些就稱為屬性
對象又有自己的行為 比如我們自己,有吃飯的行為,講話的行為,這些就稱為方法
說了對象怎麼能不回顧一下類:
人有男人女人老人兒童,豬有野豬和家豬,但他們都屬于人和豬這兩個類

講到對象呢不得不回顧一下面向對象
面向對象是幹嘛的?有啥子用?
這就要聯想一下計算機出現的目的了:
用計算機語言描述現實世界
用計算機解決現實中的問題
而面向對向呢就是用幫助開發人員的:
1.交流更加流暢
2.提高設計和開發效率
3.符合人類的思維習慣
4.提高設計和開發的效率
接着回來看如何用計算機語言描述一個對象所屬的類以及它的屬性和方法
類的表示
屬性的表示
方法的表示
代碼表示:
狗類
public class Dog {//狗的類名(Dog)
狗的屬性如下
String name="小哈"; //昵稱
int health = 60; //健康值
int love = 20; //親密度
String strain = "哈士奇"; //品種
/**
* 狗的方法
*/
public void print(){
System.out.println(String.format("寵物的自白:\n我的名字叫%s,健康值是%d,和主人的親密度是%d,我是一隻%s",this.name,this.health,this.love,this.strain));
}
}
===========
//建立狗狗對象
Dog dog = new Dog();
dog.name=name;
dog.strain=strain;
dog.print();//調用狗的方法
這裡注意一個關鍵字和修飾符:
static關鍵字
static可以修飾:變量,方法,代碼塊
static修飾的變量可以使用類名直接調用
static修飾的代碼塊自動加載,并且在第一行輸出
代碼示例:
/**
* 寵物企鵝類,使用靜态常量。
*/
public class Penguin {
String name = "無名氏"; // 昵稱
int health = 100; // 健康值
int love = 0; // 親密度
static final String SEX_MALE ="Q仔";
static final String SEX_FEMALE="Q妹";
//static final String SEX_MALE = "雄";
//static final String SEX_FEMALE = "雌";
String sex = SEX_MALE; // 性别
/**
* 輸出企鵝的資訊。
*/
public void print() {
System.out.println("寵物的自白:\n我的名字叫" + this.name
+ ",健康值是" + this.health + ",和主人的親密度是"
+ this.love + ",性别是 " + this.sex + "。");
}
}
測試類===========
public class Test {
public static void main(String[] args) {
Penguin pgn = null;
pgn = new Penguin();
System.out.println("第一個企鵝的性别是" + pgn.sex + "。");
pgn = new Penguin();
pgn.sex = Penguin.SEX_FEMALE;
System.out.println("第二個企鵝的性别是" + pgn.sex + "。");
pgn = new Penguin();
pgn.sex = Penguin.SEX_MALE;
System.out.println("第三個企鵝的性别是" + pgn.sex + "。");
}
}
final修飾符
final修飾變量,變量便常量
final修飾方法,方法不能被重寫
final修飾類,類不能被繼承
構造方法與方法的重載
構造方法:
- 方法名和類名相同,
- 與通路修飾符和傳回值類型無關
- 分為有參構造和無參構造
- 作用:可以給聲明的屬性指派
- 在沒有聲明構造方法的情況下,系統預設提供一個無參構造方法; 如果聲明了構造方法,系統則不會提供預設的無參構造方法
方法重載:
在同一個類中
- 方法名相同
- 參數的清單不同{參數的個數不同,參數的順序不同,參數的類型不同}
- 與通路修飾符和傳回值類型無關
- 可以是普通方法構成,也可以是構造方法構成
來看代碼:
/**
* 狗類
*/
public class Dog {
String name="小哈"; //昵稱
int health = 100; //健康值
int love = 0; //親密度
String strain = "哈士奇"; //品種
/**
* 無參構造
*/
public Dog(){
System.out.println("執行了無參構造");
}
/**
* 有參構造
* @param name 昵稱
* @param strain 品種
*/
public Dog(String name,String strain){
System.out.println("執行了有參構造");
this.name=name;
this.strain=strain;
}
/**
* 寵物的自述
*/
public void print(){
System.out.println(String.format("寵物的自白:\n我的名字叫%s,健康值是%d,和主人的親密度是%d,我是一隻%s",this.name,this.health,this.love,this.strain));
}
}
=====================================
測試類:
public class Test {
public static void main(String[] args){
//建立狗狗對象
Dog dog = new Dog(); //預設調用無參構造
dog.print();
System.out.println();
//調用有參構造
dog = new Dog("旺财","泰迪"); //調用有參構造
dog.print();
System.out.println();
}
}
this的使用
1)this代表什麼?:代表是目前類對象(誰調用這個方法,this就是指誰)
2)在方法中調用屬性加this和不加this的差別?
this.屬性:一定指定的屬性
變量名(屬性名相同):先檢視此方法中是否有變量或參數同名,該變量指的就是
該變量或參數,如果方法中不存在同名的參數和變量,則指的是同名的屬性,否
則報錯
代碼如下:
public class Dog{
public Dog() {
System.out.println("狗出生了---順産");
}
//自己添加的構造方法
public Dog(String name,String strain) {
this.name = name;
this.strain = strain;
System.out.println("狗出生了...---難産.");
}
public Dog(String a,int b) {
System.out.println("狗出生了----剖腹産");
}
public Dog(int b,String a) {
System.out.println("狗出生了----流産出來了");
}
String name = "無名氏"; // 昵稱,預設值是"無名氏"
int health = 100; // 健康值,,預設值是100
int love = 0; // 親密度
String strain = "哈士奇"; // 品種
/**
* 輸出狗狗的資訊。
*/
public void print() {
System.out.println("寵物的自我介紹:\n我的名字叫" + this.name +
",健康值是" + this.health + ",和主人的親密度是"
+ this.love + ",我是一隻 " + this.strain + "。");
}
}