黑馬程式設計師 物件導向(三)

2021-06-29 08:42:50 字數 4394 閱讀 4646

1、多型概念

定義:某一類事物的多種表現形式。可以理解為事物存在的多種體現形態。

2、多型-

擴充套件性

多型的體現:父類的引用指向了自己的子類物件。父類的引用也可以接受自己的子類物件。如:father father=new sun();

多型的好處:多型的出現大大的提高了程式的擴充套件性。

多型的前提:必須是類與類之間的關係,要麼繼承,要麼實現。通常還有乙個前提,存在覆蓋。

多型的弊端:提高了擴充套件性,但只能使用父類的引用訪問父類中的成員。

inte***ce animal 

public class dog implements animal  }

public class pink implements animal  }

public class duotaidemo 

/**

* 用父類來接受子類,那麼就可以呼叫子類和父類相同的方法*/

public static void animaleat(animal animal)  }

結果:狗吃骨頭

豬吃豬飼料

3、多型-

轉型

如果想要操作子類特有的方法,怎麼辦?

強制將父類的引用轉成子類型別。如:father father=new son();son son=(

son)

father;

但不能這麼做:(將父類物件轉成子類型別)

father father=new father();

son son=(

son)

father;

我們能轉換的是父類引用指向了自己的子類物件時,該引用可以被提公升,也可以被強制轉換。多型自始自終都是子類物件在做著變化。

判斷乙個例項是不是某個型別時:a instanceof son;a

是例項名,

son是類名

4、多型-

示例

inte***ce animal 

public class dog implements animal 

/* 自獨有的方法 

*/public void seedoor() 

} public class pink implements animal 

/* 自獨有的方法 

*/public void dongdi() 

} public class duotaidemo 

/**

* 用父類來接受子類,那麼就可以呼叫子類和父類相同的方法*/

public static void animaleat(animal animal) else if(animal instanceof pink) }

}結果;

狗吃骨頭 看門

豬吃豬飼料

豬,gongdi

5、多型中成員的特點

在多型中成員函式(非靜態)的特點:

在編譯時期:參閱引用型變數所屬的類是否有呼叫的方法,如果有,編譯通過,如果沒有,編譯失敗。

在執行時期,參閱物件所屬的類是否有呼叫方法。

簡單總結:成員函式在多型呼叫時編譯看左邊,執行看右邊。

public class fu 

public void print() }

public class zi extends fu 

public void print()

public static void main(string agrs)  }

結果:父類的靜態的show()

方法子類的非靜態的print()

方法涉及面試的環節:

在多型中成員變數和靜態函式的特點:無論編譯和執行,都參考左邊(引用變數所屬的類)

6、多型的主機板示例

需求:電腦執行例項,電腦執行基於主機板。

inte***ce pci

class mainboard

public void usepci(pci p)//pci p = new netcard()//介面型引用指向自己的子類物件。 }

} class netcard implements pci

public void close()

} class soundcard implements pci

public void close()

} class duotaidemo5 

} 7、多型的擴充套件示例

需求:資料庫操作,資料是使用者資訊

(1)連線資料庫,

(2)運算元據庫,增刪改查

(3)關閉資料庫連線。

inte***ce userinfodao

class userinfobyjdbc implements userinofdao

public void delete(user user)

} class userinfobyhibernate implements userinfodao

public void delete(user user)

} class  dboperate

} 8、object類

object是所有物件的直接或者間接父類,傳說中的上帝。該類定義的肯定是所有類都具備的功能。

object已經提供了對物件是否相同的比較方法,如果自定義類中也有比較相同的功能,沒有必要重新定義,只要沿襲父類中的功能,建立自己特有的比較內容即可,這就是覆蓋。

9、內部類訪問規則

定義:將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類(內建類)。

內部類特點:

內部類可以直接訪問外部類中的成員,也包括私有。

外部類要訪問內部類必須建立內部類物件。

在另乙個類中訪問內部類方式:外部類.

內部類 名稱

=new 

外部類(). new 

內部類();

private可以修飾內部類的

class

前面。如果內部類和外部類有相同的變數名,則在外部類訪問內部類變數時方式:外部類.this.

變數名;

10、靜態內部類

總結訪問格式:

1當內部類定義在外部類的成員位置上,而且非私有,可以再外部其它類中,可以直接建立內部類物件。

格式:外部類名.

內部類名 變數名

=外部類物件

.內部類物件

;如:outer.inner in=new outer().new inner();

2當內部類在成員位置上,就可以被成員修飾符所修飾,比如:

private

,將內部類在外部類中進行封裝。還有

static

,內部類就具備

static

的特性。

當內部類被static

修飾後,只能直接訪問內部類中的

static

成員,出現了訪問許可權。

在外部其它類中,如何直接訪問靜態內部類呢?

方式:new 

外部類名

.內部類

().函式名(引數

);如:

new outer.inner().function();

如果內部類的成員函式也是靜態的,訪問方式是:outer.inner.function();

注意:當內部類中定義了靜態成員,該內部類必須是靜態的。

當外部類中的靜態方法訪問內部類時,內部類也必須是靜態的。

11、內部類定義原則

當描述事物時,事物的內部還有事物,該事物用內部類來描述。因為內部事務在使用外部事物的內容。

12、匿名內部類

在成員方法中也可以定義區域性類,但該局部類不能被private

和static

修飾內部類定義在區域性時,不可以被成員修飾符修飾,可以直接訪問外部類中的成員,因為還有外部類中的引用,但是不可以訪問他所在的區域性中的變數,只能訪問final

修飾的區域性變數。

匿名內部類:

1.匿名內部類其實就是內部類的簡寫格式。就是沒名字的內部類。

2.定義匿名內部類的前提:內部類必須繼承乙個類,或者實現介面。

3.匿名內部類的格式:

new 

父類或者介面

()4.其實匿名內部類就是乙個匿名子類物件,而且這個物件有點胖,可以理解為帶內容的內部物件。

在成員方法中定義匿名內部類的方法:

public void 成員方法

().重寫或自己特有的方法或覆蓋的方法名

();}

黑馬程式設計師 物件導向

物件導向 1 物件導向 是基於面向過程的一種思想。面向過程 以函式為基礎,關注實現過程。物件導向 以物件為基礎,關注實現結果。2 物件導向的思想特點 a 是一種更符合人們思考習慣的思想。b 把複雜的事情簡單化了。c 把我們從執行者變成了指揮者。舉例 買電腦。洗衣,做飯。旅遊。把大象裝進冰箱。體現 c...

黑馬程式設計師 物件導向

物件導向是一種思想,把複雜事物簡單化,把面向過程的執行者變成了指揮者。過程其實就是函式,而物件將函式和一些內容封裝。把事物的屬性和行為封裝成物件,再把物件抽象成類。類的訪問修飾符有public和final。而成員的修飾符有public private protected static 成員變數和區域...

黑馬程式設計師 物件導向思想

物件導向的思想 誰有資料,誰就對外提供操作這些資料的方法。例子1 人在黑板畫圓 public class circle private int radius 1 public circle circlecenter,radius public void draw int circlecenter,i...