面向對象複習一

一 萬物皆對象
1.類是多組對象的相同信息的抽取,對象是類的實例化。例如:人類,就是所有人的對象的抽取,他們有相同的屬性,名字,性別,年齡等等。

2.對象創建過程:new關鍵字 例如:People people=new People()
這句話所對應的內部操作:(1) 分配內存空間(堆中創建內存空間) (2) 初始化引用變量(People people) (3)調用構造方法(People類當中的構造方法) (4)返回實例對象的引用(將右邊的new People() 與左邊People people連接)

二 三大特性:封裝,繼承,多態
1.封裝: 定義類,屬性,方法的過程就是封裝

2.目的:隱藏信息,向外部提供公開接口,安全調用

3.static 靜態方法不能使用this關鍵字,只能調用靜態成員(單例設計模式)

4.訪問權限:大到小 public>protected>默認>private
public:(1)不同包,不是子類 (2)不同包,是子類 ,(3)同包類,(4)同類
protected (2)(3)(4) 默認 (3)(4) private (4)

5.方法重載與重寫:
(1) 重寫(overrride):用於繼承中,子類重寫父類的方法(方法名稱,參數,返回值不改變) ,訪問權限不能比父類更嚴格 ,父類私有方法,構造方法不能重寫
(2) 重載:本類中,返回值,參數個數會發生改變,單有返回類型不同,訪問修飾符不同,不是重載。注意:一定得有參數個數或類型發生改變。

6.this,super
this用於本類中,可以看作一個類類型的變量,構造方法時用到this.name=name;
super 在子類中調用父類方法和字段時用super關鍵字,子父類同名,可以用來區別,子類構造方法中用super繼承父類構造

7.繼承(extends)
子類擁與父類相同的屬性和方法,便於節省代碼,優化代碼
子類不能繼承父類的構造方法,私有方法,子類可以調用父類的構造方法,通過super 關鍵字

8.多態前提 存在繼承實現關係 消除耦合

9.對象向上轉型,丟失子類中非父類的方法(安全),向下轉型(不安全 可能用到 instanceof 避免類轉換異常)
例如:
public class DuoTaiDemo {

public static void main(String[] args) {
    ColorPrinter cp=new ColorPrinter("zhangsan");
    School school=new School();
    school.setPrinter(cp);
    school.daYin("nihao");

    BlackPrinter bp=new BlackPrinter("lisi");
    School school1=new School();
    school1.setPrinter(bp);
    school1.daYin("nihao");
}

}

class School{
private Printer printer=null;
/*public School(Printer printer){
this.printer=printer;
}*/
public void setPrinter(Printer printer){
this.printer=printer;//向上轉型,調用子類中的重寫父類的方法
}
public void daYin(String content){
printer.print(content);
}
}

class Printer{
private String pinPai;
public Printer(){}
public String getPinPai() {
return pinPai;
}
public void setPinPai(String pinPai) {
this.pinPai = pinPai;
}
public Printer(String pinPai){
this.pinPai=pinPai;
}
public void print(String content){}
}
class ColorPrinter extends Printer{
public ColorPrinter(String pinPai) {
super(pinPai);
}
public void print(String content){
System.out.println(getPinPai()+”彩色打印”+content);
}
}
class BlackPrinter extends Printer{
public BlackPrinter(String pinPai) {
super(pinPai);
}
public void print(String content){
System.out.println(getPinPai()+”黑白打印”+content);
}
}
上面例子就是動態綁定,用父類作爲參數,當傳子類參數時,自動向上轉型,調用子類重寫父類的打印方法,多態能優化代碼,增加子類不用修改School類當中的內容,靜態綁定,就是直接在方法上加static,直接用類名.方法調用,不用像動態綁定一樣實例化,才能調用方法。

10.抽象類(abstract)與接口:
抽象類中可以有抽象方法,也可以沒有,但有抽象方法一定是抽象類,抽象類不能實例化,不能被final修飾
抽象方法特點:沒有方法體,有abstract修飾,不能被調用(is a)

接口(interface):接口只能存放靜態常量和抽象方法,它避免了java不能多繼承的缺點,接口之間可以extends聯繫 (like a)

一個類可以繼承一個父類,實現多個接口

11.運行前後問題:
父類的靜態成員賦值和靜態塊—>子類的靜態成員和靜態塊—>父類的構造方法—>父類的成員賦值和初始化塊—>父類的構造方法中的其它語句—>子類的成員賦值和初始化塊—>子類的構造方法中的其它語句—>子類靜態代碼塊—>父類構造方法—>子類構造—>子類方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章