我是張騷年,量子玄學信徒,祖安衝浪王者,B站白嫖大師,撕少保護協會資深會員,一個沒有感情的表情包機器。java
應屆二本物理找不到工做,準備用五個月轉行Java」上流社會「程序員
學習面向對象的第一天,在網上看到一個段子:程序員是不缺對象的,沒有什麼對象是一個new解決不了的,若是有,就多new幾個。
我撓了撓頭,程序員路子都這麼野的嗎?
編程
計算機中的對象 : 複雜的客觀事物在java程序中的表現形式。
在計算機眼中,一切都是對象。
舉個例子:函數
描述一個對象:以水杯爲例oop
- 名稱、材料、顏色、大小 ------外在特徵
- 除了有特徵,還具備保溫功能能幹什麼 -------所具備的功能
- 在描述的時候 除了描述特徵、還須要描述功能
描述一我的 應該怎麼描述學習
- 身高、體重、年齡、衣服顏色
- 對應的是數據,表明對象有什麼特徵、外在特色
- 程序中以變量體現,稱爲對象的屬性
- 吃飯、睡覺、喝水、唱歌
- 對應的是行爲和功能,表明對象能作什麼
- 程序中以函數體現,函數之後統稱爲方法,稱爲對象的方法
經過面向對象能夠在Java中模擬客觀是的事物:測試
總結this
類:保存了一類對象的信息,定義了對象的屬性和方法【對象的模板】
類的組成:spa
public class Day07 {public static void main(String[] args) { 複製代碼
// 建立對象經過new Dog dog = new Dog();
// 給狗的屬性賦值 dog.name = "hhh"; dog.age = 18;
// 調用狗的方法 dog.eat(); } }
class Dog{ // 定義屬性 狗的名字 String name; // 狗的年齡 int age;
複製代碼public static void main(String[] args) { 複製代碼// 定義方法 public void eat(){ System.out.println("狗能夠吃"); } }
面向對象的開發方式:
- 定義類
- 建立對象
- 使用對象的實例變量和實例方法完成需求
在一個類中,同一種功能可能會有多種表現形式。
例如:人的吃功能,對於不一樣的東西有不一樣的吃方式,吃藥、吃飯、吃口香糖
所以在一個類中,寫吃方法的時候,也會存在實現方式的差別。也就是方法名字相同 可是實現不一樣
這樣的作法稱之爲方法的重載
方法的重載:在一個類中定義多個方法名相同,參數列表不一樣的方法
參數列表不一樣的狀況有:
注意:形參名不一樣,不算形參列表不一樣,不構成重載
使用的時候根據外界傳入的實參來匹配對應的方法
編譯器根據調用者傳遞的實際參數,肯定調用哪個方法
編譯器根據參數匹配方法時,先進行精確匹配,若是匹配不成功,則就近向上匹配,可是注意避免混淆的現象
public class Day07 {
public static void main(String[] args) {
// 建立對象經過new
Dog dog = new Dog();
// 給狗的屬性賦值
dog.name = "hhh";
dog.age = 18;
// 調用狗的方法
dog.eat();
// 調用重載的方法
dog.eat("骨頭");
}
}
class Dog{
// 定義屬性 狗的名字
String name;
// 狗的年齡
int age;
// 定義方法
public void eat(){
System.out.println("狗能夠吃");
}
// 重載的方法
public void eat(String food){
System.out.println("狗能夠吃"+food);
}
}
複製代碼
構造方法:類的內部除了有屬性、方法 還有一個構造方法,構造方法 仍是方法,只是比較特殊
構造方法的特色:
public class Day07 {
public static void main(String[] args) {
// 建立對象經過new 使用構造方法建立對象
Dog dog = new Dog();
// 使用有參構造方法建立對象
Dog kkk = new Dog("kkk", 23);
// 給狗的屬性賦值
dog.name = "hhh";
dog.age = 18;
// 調用狗的方法
dog.eat();
// 調用重載的方法
dog.eat("骨頭");
}
}
class Dog{
// 定義屬性 狗的名字
String name;
// 狗的年齡
int age;
// 定義方法
public void eat(){
System.out.println("狗能夠吃");
}
// 重載的方法
public void eat(String food){
System.out.println("狗能夠吃"+food);
}
// 無參構造方法
public Dog() {
}
// 兩個參數的構造方法
public Dog(String name, int age) {
this.name = name;
this.age = age;
}
}
複製代碼
一個對象的建立 不是一蹴而就的。有步驟的,第一步幹啥,第二步幹啥 第三步幹啥
對象建立的觸發點:使用new關鍵字建立對象
名詞 | 含義 |
---|---|
overload | 重載 |
class | 類 |
public class Test17 {
public static void main(String args[]) {
Worker w = new Worker("zhangsan", 26, 10000.0);
Address addres = new Address("北京市海淀區清華園1號院", "100010"); w.address = addres;
}
}
//工人類
class Worker {
String name;//姓名
int age;//年齡
double salary;//工資
Address address;//地址(屬性的類型是Address類型)
public Worker() {
}
public Worker(String name, int age, double salary) { this.name = name;
this.age = age;
this.salary = salary;
}
public void work() { System.out.println("work");
}
public void work(int hours) {
System.out.println("worker works for " + hours + " hours");
}
}
//地址類
class Address {
String address;
String zipCode;
public Address() {
}
public Address(String address, String zipCode) {
this.address = address;
this.zipCode = zipCode;
}
}
複製代碼