面向對象 在學習面向對象之前我們先來看一下麵向過程 面向過程思想 面向過程的步驟清晰簡單,第一步做什麼,第二步做什麼 面向對象過程適合處理一些簡單的問題 面向對象的過程可以用把大象放進冰箱舉例 面向對象的分析: 第一步:把冰箱門打開 第二步:把大象放進冰箱 第三步:把冰箱門關上 面向 ...
面向對象
- 在學習面向對象之前我們先來看一下麵向過程
面向過程思想
-
面向過程的步驟清晰簡單,第一步做什麼,第二步做什麼
-
面向對象過程適合處理一些簡單的問題
面向對象的過程可以用把大象放進冰箱舉例
面向對象的分析:
第一步:把冰箱門打開
第二步:把大象放進冰箱
第三步:把冰箱門關上
面向對象思想
-
面向獨享是用分類的思維模式,思考解決問題需要哪些分類,然後對這些分類進行單獨的思考。最後,才對分類的某個細節進行面向過程的探索
-
面向對象適合處理複雜的問題,適合處理需要多人協作的問題
還是以把大象放進冰箱舉例
面向對象的分析過程:
第一步:把動作的實體抽象出來,主體,有人,冰箱,大象
第二步:定義主體,為主題添加對應的功能和屬性
人,需要有打開,關閉冰箱的功能,以及放大象進冰箱的功能
冰箱,需要有開門,關門的屬性
大象,需要有能放進入冰箱的功能
-
面向對象的本質就是:以類的方式組織代碼,以對象的組織(封裝)數據
-
抽象
-
三大特性:封裝
繼承
多態
創建與初始化對象
使用new關鍵字創建對象
- 使用new關鍵字創建對象的時候,除了分配記憶體空間之外,還會給創建好的對象進行預設化的初始值以及對類中構造器的調用
代碼示例:類中只能有屬性和方法
package com.oop.Demo02;
//學生類
public class Student {
//屬性:欄位
String name;
int age;
//方法
//this代表當前的類,用於本類的方法中使用本類的屬性
public void study(){
System.out.println(this.name+"在學習");
}
}
我們在定義了類之後,要在main方法中去調用,這時候,我們就應該創建一個測試類,或者應用類,這個類用來調用這個項目中所有類的方法和屬性,一個項目應該只存在一個main方法
eg:
package com.oop.Demo02;
//一個項目應該只存在一個main方法
public class Test {
public static void main(String[] args) {
//類是抽象的,需要實例化,通過new來實例化
//類實例化後會返回自己的對象
//student對象就是一個Student類的具體實例
Student daughter=new Student();
daughter.name="阿尼亞";
daughter.age=5;
System.out.println(daughter.name);
System.out.println(daughter.age);
}
}
輸出:
阿尼亞
5
- 類中的構造器也稱為構造方法,是在進行創建對象的時候必須要調用的。並且構造器有以下兩個特點:
- 1.必須和類的名字相同
- 2.必須沒有返回類型,也不能寫void
接下來我們看一下關於構造器
我們首先隨便定義一個動物類Animal
Animal.java:
public class Animal {
}
然後在測試中實例化這個類,運行一下看
Application.java:
public class Application {
public static void main(String[] args) {
//new 實例化了一個對象
Animal animal=new Animal();
}
}
可以看出我們在上面的Animal類中是什麼都沒寫的,然而實例化看一下class文件可以看出
Animal.class:
package com.oop.Demo02;
public class Animal {
public Animal() {
}
}
可以看出在class中已經生成了一個class文件
一個類中即使什麼都不寫,也會存在一個方法
而我們看一下無參構造和有參構造
上述,自動生成的方法就是一個無參構造方法,我們自己寫一下看,
無參構造:
public class Animal {
//屬性 name
String name;
//無參構造
public Animal() {
}
}
調用一下無參構造的方法:
public class Application {
public static void main(String[] args) {
//new 實例化了一個對象
Animal animal=new Animal();
animal.name="bangde";
System.out.println(animal.name);
}
}
輸出:
bangde
即使我們不加這個無參構造,輸出也能得到自己想要的,因為上文說過編譯器會自動生成一個午餐的構造方法。
有參構造:
public class Animal {
//屬性 name
String name;
//有參構造
public Animal(String name) {
this.name = name;
}
}
加有參構造之後,我們可以看到,剛纔實例化的對象,已經開始報錯了!
插入圖片:
那是因為,我們創建了有參構造方法之後,編譯器便不會為我們生成無參的構造方法了,這時如果我們還想要有無參的構造方法,需要自己再寫一個無參的構造方法!
public class Animal {
//屬性 name
String name;
// 無參構造
public Animal() {
}
public Animal(String name) {
this.name = name;
}
}
這是程式可以正常運行,那如果我們想調用無參的構造方法,只需,給方法傳入對應的參數即可!
public class Application {
public static void main(String[] args) {
//new 實例化了一個對象
Animal animal=new Animal();
animal.name="邦德";
System.out.println(animal.name);
Animal animal2=new Animal("汪汪");
System.out.println(animal2.name);
}
}
當然,我們再idea中,也是有快捷鍵去生成有參和無參的構造方法的快捷鍵的。
當在類中定義過屬性之後
只需,按住ALT+INSERT鍵,點擊Constructor,然後選中想要創建有參構造方法的屬性即可生成有參的構造方法,如果方法中想包含多個屬性,按住ctrl鍵,然後點擊多個即可!
如果想生成無參的構造方法,點擊過Construcor之後點擊select None即可
插入圖片: