面向物件(OOP)和面向程序
OOP: Object Oriented Programming
面向程序: procedure oriented programing
??兩者都是一種思想, 面向物件是相對于面向程序而言的,面向程序強調的是功能行為; 面向物件則是將功能封裝進物件,強調具備了功能的物件
面向程序的三大特征
- 封裝(Encapsulation)
- 繼承(Inheritance)
- 多型(Polymorphosm)
類和物件
類(class)和物件(Object)是面向物件的核心概念, 萬事萬物皆物件
類是對現實中一類事物的抽象描述,現實事物都具有屬性和行為
類的成員變數描述事物的屬性,類的成員方法描述事物的行為
物件則是實際存在的該類的一個個體, 是根據類的描述而創建出來的具體實體(instance)
定義類
public class Phone {
// 成員變數
String brand;
double price;
String color;
// 成員方法
public void call(){
// 方法中未定義變數時, 會在成員變數中尋找對應的變數
System.out.println(brand + " " + color + " " + price +"元的手機打電話了");
}
public void sms() {
System.out.println(brand + " " + color + " " + price +"元的手機發短信了");
}
}
創建物件
public class Demo {
public static void main(String[] args) {
// 創建物件, 依據是類模板
Phone p1 = new Phone();
Phone p2 = new Phone();
// 物件屬性的訪問, 物件.屬性
p1.brand = "xiaomi";
p1.color = "blue";
p1.price = 1999.9;
// 物件方法的訪問 物件.方法名(引數)
p1.call();
p1.sms();
// 每個物件都有自己的屬性 且互不干擾
p2.brand = "huawei";
p2.color = "black";
p2.price = 2399.9;
p2.call();
p2.sms();
}
}
成員變數的默認值
JVM會自動對成員變數進行初始化
成員變數的默認值(隱式賦值)
int 0
double 0.0
char \u0000
boolean flase
參考型別 null
成員變數的顯式賦值
public class Car {
String brand = "leinuo";
String color;
double price = 9999.9;
}
屬性私有化
防止在其它類中對成員變數直接的修改, 對資料進行一定的保護, 此時可以使用修飾符private
public: 該屬性可以被該類以外的方法訪問
private: 被修飾的成員變數/方法僅可以在本類中訪問
public class Phone {
// 成員變數
private String brand;
private double price;
private String color;
}
setter和getter
在本類中給添加新的方法, 用于間接的訪問私有屬性
// Phone Class
// 給屬性賦值使用的方法被稱為set方法, 有參無回傳
// 可以在set方法中對值的合法性做判斷, 從而保護資料
public void setPrice(double p) {
if (price < 0 || price > 30000) {
return ; // 提前彈堆疊
}
price = p;
}
// 獲取屬性值的方法被稱為get方法, 無參有回傳
public double getPrice() {
return price;
}
public void setBrand(String b) {
brand = b;
}
public String getBrand() {
return brand;
}
public String getColor() {
return color;
}
public void setColor(String c) {
color = c;
}
// Demo Class
Phone p1 = new Phone();
p1.setBrand("huawei");
p1.setColor("black");
p1.setPrice(2399.9);
System.out.println(p1.getBrand() + " " + p1.getColor() + " " + p1.getPrice());
在idea中可以使用alt+insert -> Getter and Setter快速創建getter和setter
關鍵字 - this
上面的代碼中的形參 a、b、c 不易區分
若修改為與成員變數相同, 由于就近原則(優先訪問距離最近的)會導致成員變數沒有接收到值
public void setColor(String color) {
// 自己的值賦給自己
color = color;
}
則需要對成員變數和區域變數加以區分,使用this關鍵字
this表示物件, this.color就是物件的color屬性
public void setColor(String color) {
this.color = color;
}
匿名物件
沒有物件名的物件, 呼叫結束后空間會被立即回收
new Phone().call();
使用情況:
1.當一個物件只需要進行一次方法呼叫時;
2.作為實參傳遞給一個方法呼叫
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/548764.html
標籤:Java
