1. 程式人生 > >JavaSE基礎系列之面向物件(上)

JavaSE基礎系列之面向物件(上)

面向物件

1,什麼是面向物件?
           面向物件(Object Oriented,OO)是軟體開發方法,是一種對現實世界理解和抽象的方法。
           面向物件的思想已經涉及到軟體開發的各個方面。如,面向物件的分析(OOA,Object Oriented Analysis),面向物件的設計(OOD,Object Oriented Design)、以及我們經常說的面向物件的程式設計實現(OOP,Object Oriented Programming)。
           我們寫程式就相當於OOP。
           面向物件中有兩個概念,類和物件,這兩個可以理解為面向物件的一個基石。
           馬雲說,要讓天下沒有難做的生意,那麼面向物件的思想,就是讓我們能夠做到,天下沒有難寫的程式。
2,面向物件的三大特徵

1,封裝性
2,繼承性
3,多型性

類和物件

1,什麼是類?

類,對某一類事物的抽象描述(抽象化),用於描述一組物件的共同特徵和行為,例如,貓和狗,統稱為動物。 人民幣和美元,統稱為貨幣。

2,什麼是物件?(面向物件的核心,畢竟是面向物件嘛!)

物件,對於某類事物的具象描述(例項化),例如,人民幣是貨幣的一種,貓是動物的一種。

3,類和物件之間的關係?

如上所述,類是對具有相同特徵的物件的描述,而物件是對類的一種具體化的解釋。
通俗點講,包含與被包含的關係,Java是一種程式語言,程式語言中有Java這個分支。

4,類的組成

類由成員變數和成員方法組成,其中成員變數(屬性)可以理解為對物件特徵的描述,成員方法(方法)可以理解為對物件行為的描述。
例如:人都有國家(屬性),人都會花錢(行為),一個名詞,一個動詞。

public class Person {
	String nationality;
	void spendMoney() {
		System.out.println("大家好,我今天花了" + nationality + "的錢");
	}
}

5,物件的建立與使用

類名 物件名稱 = new 類名();
eg:Person p1 = new Person();
其中:“new Person()” 用於建立Person的一個例項,p1相當於Person的一個引用,儲存的是一個地址,指向記憶體的堆區中的Person例項。
通過物件的引用來訪問物件的所由成員的格式:物件引用.物件成員
需要注意的是,成員變數(屬性)如果不手動賦值的話,系統會預設為其賦值,根據其不同的型別,需要注意的是char型別的預設賦值為一個空字元,"\u0000"。

public class ObjectDemo {

	public static void main(String[] args) {
		Person p1 = new Person();
		Person p2 = new Person();
		p1.nationality = "中國";
		System.out.println(p1.nationality);
		p1.spendMoney();
		p2.spendMoney();
	}

}
結果:
中國
大家好,我今天花了中國的錢
大家好,我今天花了null的錢

6,類的封裝
      類的封裝就是在定義一個類的時候,將類中的屬性私有化,不讓外部隨意對其進行操作,外界需要對私有化物件操作的時候,需要呼叫類中有關私有屬性的方法。

通俗點講,世界上有那麼多國家,在中國(這個類中),只能消費人民幣(私有化),美元在這不流通,那美國人在中國消費是不是需要把美刀兌換成人民幣呢(外部操作)?所以中國提供了貨幣兌換(中國這個類提供的方法)。

//舉個例子
class Student {

	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		if (age <= 0 || age > 150) {
			System.out.println("你輸入的年齡有問題,能不能長點心?");
		} else {
			this.age = age;
		}

	}

}

public class Demo1 {

	public static void main(String[] args) {
		Student s1 = new Student();
		Student s2 = new Student();
		s1.setName("張三");
		s1.setAge(20);
		System.out.println("姓名:" + s1.getName() + ",年齡:" + s1.getAge());
		s2.setName("李四");
		s2.setAge(-10);
		System.out.println("姓名:" + s2.getName() + ",年齡:" + s2.getAge());
	}
}

7,通過上邊的例子可以知道,我們在建立物件的時候,是需要new一下的,通過new呼叫類中的構造方法,那麼什麼是構造方法呢?

1,構造方法的定義
      類中的一個特殊成員,在類例項化的時候自動被呼叫。
      構造方法需要滿足的條件:方法名和類名相同,無返回值型別,不能使用return返回值。
2,為何上邊那麼例子沒有構造方法,卻可以建立物件呢?
      因為Java中,如果沒有顯示建立構造方法的話,那麼系統會自動提供一個無參構造方法。但是如果顯示建立之後,Java將不再提供。
      簡單點說,就是,你在中國出生,如果你爸媽不給你修改國籍的話,你就是一箇中國人了,但是你爸媽主動給你修改了國籍,那麼中國憑什麼還要再給你提供中國國籍?一個道理。
3,既然是方法,那麼就會有方法的過載,構造方法也一樣,一個類中允許有多個構造,正如一個地球上,有多個國籍,可以選擇。
4,構造方法不要使用private()修飾,修飾了之後,將無法通過該構造方法例項化物件。

class Student {

	int age;
	String name;
	public Student() {
		
	}
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
}

public class Demo1 {

	public static void main(String[] args) {
		Student s1 = new Student();
		Student s2 = new Student("張三", 20);
		System.out.println(s1.name + ":" + s1.age);
		System.out.println(s2.name + ":" + s2.age);
	}
}