面向物件知識點總結
阿新 • • 發佈:2019-02-09
一:封裝
封裝簡而言之,就是把具有相同屬性和行為的東西封裝成一個類,以便提供給各個介面來訪問。
封裝是面向物件的開始,面向物件的基礎。
由於封裝很多人都寫了,我這邊就不示例了。
封裝要注意的幾個地方(個人意見):
①:在封裝屬性和方法的時候要注意修飾符。(例如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();
}
}