黑馬程序員----[20150427][面向對象]

------  Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流! -------

第一講 面向對象--封裝

1.概述

面向過程:
          打開冰箱
          存儲進冰箱
          關閉冰箱

面向對象:
          冰箱.打開
          冰箱.存儲
          冰箱.關閉。

2.舉例
          買電腦---指導畢老師的。。
          軟件開發---找專業團隊。。     

3.類與對象的關係

面向對象的三大特徵:封裝,繼承,多態。
以後的開發:其實就是找對象使用。沒有對象,就創建對象。
找對象,建立對象,使用對象。維護對象的關係。

類和對象的關係。 
現實生活中的對象:張三 李四。
想要描述:提取對象中共性內容。對具體的抽象。
描述時:這些對象的共性有:姓名,年齡,性別,學習java功能。

映射到java中,描述就是class定義的類。
具體對象就是對應java在堆內存中用new建立實體。

類就是:對現實生活中事物的描述。對象:就是這類事物,實實在在存在的個體。 
class Car{
	//描述顏色
	String color = "紅色";
	//描述輪胎數
	int num = 4;

	//運行行爲。
	void run(){
	   System.out.println(color+".."+num);
	}	
}

class  CarDemo{
	public static void main(String[] args) {
		//生產汽車。在java中通過new操作符來完成。
		//其實就是在堆內存產生一個實體。
		//Car c = new Car();//c就是一個類類型變量。記住:類類型變量指向對象。

		//需求:將已有車的顏色改成藍色。指揮該對象做使用。在java指揮方式是:對象.對象成員
		//c.color = "blue";
		
		//c.run();

		//Car c1 = new Car();
		//c1.run();//red 4;

//		Car c = new Car();
//		c.num = 5;
		/*
		new Car().num = 5;
		new Car().color = "blue";
		new Car().run();

		Car c = new Car();
		c.run();
		c.num = 4;
		new Car().run();
		*/			
	}

	//需求:汽車修配廠。對汽車進行改裝,將來的車夠改成黑車,三個輪胎。
public static void show(Car c){
<span style="white-space:pre">	</span>c.num = 3;
<span style="white-space:pre">	</span>c.color = "black";
<span style="white-space:pre">	</span>c.run();
 <span style="white-space:pre">	</span>}
}

4.變量成員和局部變量

作用範圍:
成員變量作用於整個類中。
局部變量作用於函數中,或者語句中。


在內存中的位置:
成員變量:在堆內存中,因爲對象的存在,纔在內存中存在。
局部變量:存在棧內存中。

5.匿名對象的應用

new Car().num = 5;
new Car().color = "blue";
new Car().run();

匿名對象使用方式一:當對象的方法只調用一次時,可以用匿名對象來完成,這樣寫比較簡化。

如果 對一個對象進行多個成員調用,必須給這個對象起一個名字。

匿名對象使用方式二:可以將對象作爲實際參數進行傳遞。

Car q = new Car();
show(q);
//show(new Car());


6.封裝概述

封裝:是指隱藏對象的屬性和實現細節,僅對外提供公共訪問方式。

好處:將變化隔離。便於使用。提高重用性。提高安全性。

封裝原則:將不需要對外提供的內容隱藏起來。把屬性都隱藏,提供公共方法隨其訪問。


7.封裝private

注意:私有僅僅是封裝的一種表現形式。

之所以對外提供訪問方式,就因爲可以在訪問方式中加入邏輯判斷等語句。

對訪問的數據進行操作。提高代碼的健壯性。

private int age;
	public void setAge(int a)
	{
		if(a>0 && a<130)
		{
			age = a;
			speak();
		}
		else
			System.out.println("feifa age");
	}


8.構造函數

特點:1.函數名與類名相同。2.不用定義返回值類型。3.不可以寫return語句

作用:給對象進行初始化。

注意:1.默認構造函數的特點。2.多個構造函數是以重載的形式存在的。


9.構造代碼塊

開發見不到,但在面試筆試題中可以見到。

/*
	構造代碼塊。
	作用:給對象進行初始化。
	對象一建立就運行,而且優先於構造函數執行。
	和構造函數的區別:
	構造代碼塊是給所有對象進行統一初始化,
	而構造函數是給對應的對象初始化。

	構造代碼快中定義的是不同對象共性的初始化內容。

*/
	{
		//System.out.println("person code run");
		cry();
	}

10.this關鍵字

this:看上去,是用於區分局部變量和成員變量同名情況。

特點:this代表其躲在函數所屬對象的應用。換言之:this代表本類對象的引用。

什麼時候用this?當在函數內需要用到調用函數的對象時,就用this。

private int age;

Person(int age){
	this.age = age;
}

public void speak(){
	System.out.println("name="+this.name+"...age="+this.age);
	this.show();
	}

public void show(){
	System.out.println(this.name);
}

Person p1 = new Person(20);
Person p2 = new Person(25);

this:就代表本類的對象,到底代表哪一個呢?
this代表它所在函數所屬對象的引用。
簡單說:哪個對象在調用this所在的函數,this就代表哪個對象。

11.this關鍵字的應用

this的應用:當定義類中功能時,該函數內部要用到調用該函數的對象時,這時用this來表示這個對象。
      但凡本類功能內部使用了了本類對象,都用this表示。

/*
需求:給人定義一個用於比較年齡是否相同的功能。也就是是否是同齡人。
*/

public boolean compare(Person p){
     return this.age==p.age;
}

Person p1 = new Person(20);
Person p2 = new Person(25);
boolean b = p1.compare(p2);
System.out.println(b);

12.this關鍵字在構造函數間調用


this語句 :用於構造函數之間進行互相調用。
this語句只能定義在構造函數的第一行。因爲初始化要先執行。

class Person{
	private String name;
	private int age;
{
    System.out.println("code run");
}
	
Person(){
	//this("hah");
	System.out.println("person run");
}

Person(String name){
	//this();
	this.name =name;
}

Person(String name,int age){
	//this(name);
	//this.name = name;
	this.age = age;		
	}
}

class  PersonDemo4{
	public static void main(String[] args) {
	new Person();
	//Person p = new Person("lisi",30);
	//Person p1 = new Person("lisi2",36);
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章