1. 程式人生 > >面向物件知識點總結

面向物件知識點總結

一:封裝

封裝簡而言之,就是把具有相同屬性和行為的東西封裝成一個類,以便提供給各個介面來訪問。

封裝是面向物件的開始,面向物件的基礎。

由於封裝很多人都寫了,我這邊就不示例了。

封裝要注意的幾個地方(個人意見):

①:在封裝屬性和方法的時候要注意修飾符。(例如private protected 這些的作用域),很重要!!

②:在封裝時一定要是共有的屬性和方法。

二:繼承

在子類(匯出類)的構造方法中一定要對父類(基類)的構造器進行呼叫,其原因如下:

當子類要用到父類所宣告的一些變數時,假如沒有進行初始化,那麼便產生難以預料的結果。 所以當父類沒有構造方法時,就是預設的無參構造方法時,子類會在構造器的第一句預設呼叫父類的構造方法。而當你沒有在父類中使用預設的無參構造方法時,在子類進行初始化的時候必須顯式的對父類那個構造方法進行呼叫。

​/**
 * @ClassName:Chess
 * @author 
 * @version 1.0.0
 * @Description:子類的子類
 */
public class Chess extends BoardGame{

	Chess() {
		super(1);
	}
	public static void main(String[] args) {
		Chess chess = new Chess();
		
	}
	
	
}
//父類
class Game{
	Game(int i){
		System.out.println("父類Game構造器");
	}
}
//父類的子類
class BoardGame extends Game{
	BoardGame(int i){
		super(i);
		System.out.println("子類BoardGame構造器");
	}
}

可以看到,必須利用super關鍵字進行顯式呼叫。

注意,雖然編譯器會強制你去初始化基類(父類),並且要求在構造器起始處就這麼做,但是它並不監督你必須將成員物件也初始化,你可能只是在無參構造裡面初始化了基類,然而有參的構造方法裡面卻沒有初始化父類的成員物件,那麼當你要用到父類的一些變數時,就會報錯。

三:代理

首先 ,什麼是代理物件

代理物件:為其他物件提供一種代理以控制對這個物件的訪問。在某些情況下,一個客戶不想或者不能直接引用另一個物件,而代理物件可以在客戶端和目標物件之間起到中介的作用。

下面先舉例子進行具體分析。

現在有一個類Computer,裡面有好幾個方法,我現在需要造一個筆記本。

public class Computer {
	//玩遊戲
	void playGame() {}
	//工作
	void work() {}
	//讀新聞
	void readNews() {}
	//聊天
	void weChat() {}
}

方法1:繼承Computer類

public class PersonalComputer extends Computer{
	String name;

	public PersonalComputer(String name) {
		this.name = name;
	}
	public static void main(String[] args) {
		PersonalComputer pc = new PersonalComputer("雷神");
		pc.playGame();
		pc.work();
		pc.readNews();
		pc.weChat();
	}
	
}

由此可以看出,這個個人電腦包括了computer的所有功能,並且還有可能拓展其他的東西,那麼它會使computer的所有方法暴露出來可以用。那麼解決這個問題就是第二種方法代理。

方法2:用代理實現

public class ComputerProxy {
	private String name;
	private Computer computer = new Computer();

	public ComputerProxy(String name) {
		super();
		this.name = name;
	}

	public void playGame() {
		computer.playGame();
	}

	public void work() {
		computer.work();
	}

	public void readNews() {
		computer.readNews();
	}

	public void weChat() {
		computer.weChat();
	}
	public static void main(String[] args) {
		ComputerProxy cProxy = new ComputerProxy("雷神");
		cProxy.playGame();
	}
}

* 以上是對computer類的一個代理物件來實現對computer類內部方法的呼叫,當然,我們使用代理的時候是可以擁有更多的控制力,比如private的成員和方法都可以訪問,但是你可以選擇只提供在成員物件中的方法的某個子集,這也是和繼承不同的地方,也是代理的優點