天天看點

面向對象

面向對象語言是基于面向過程的!

面向過程:代表:c語言

面試題:

面向對象思想的特點: 千萬不要說:萬物皆對象!

面向對象設計原則:

就是不斷建立對象,使用對象,指揮對象做事情

面向對象的三個特征:

封裝:

繼承

多态

類和對象的關系

類是描述現實世界的事物

學生---->學生事物 ---->學生類:student

屬性:姓名,年齡,性别,學号

成員變量:在類中方法外

行為:主要工作學習

成員方法:去掉static

代碼塊:

在java語言,用{}括起來的内容,簡稱為代碼塊!

代碼塊的分類:

局部代碼塊

書寫的位置,是在方法中定義的{代碼...}

作用:限定變量的生命周期的

構造代碼塊

在類的成員位置,每次在執行構造方法之前,如果目前類中有構造代碼塊,優先執行構造代碼塊,在執行構造方法

作用:如果多個類的構造方法中有共有的内容,可以将抽取到構造代碼塊中

靜态代碼塊

在類的成員位置,在{} 外面被static,靜态代碼塊

優先于對象存在!

靜态代碼塊隻執行一次,優先執行

類的成員:

1)成員變量

2)構造方法: 無參構造方法/有參構造方法

3)成員方法

如何使用文檔說明書?

進入jdk文檔之後

點選顯示--->索引---->查詢哪個類 比如scanner

static的特點:

随着類的加載而加載(static跟類有關系)

1)被static修身的變量/方法,它都是優先于對象存在

2)static可以被多個對象共享

舉例:

我們java班共享一個班級号

static關鍵字的注意:

1)在靜态方法中,是沒有this關鍵字

被靜态修飾的是随着類的加載而加載,this随着對象的建立而存在

靜态優先于對象存在!

被靜态修飾的内容一般稱為:類成員

2)通路的問題

在靜态方法中,

針對成員變量:隻能通路靜态的成員變量

針對成員方法:隻能通路靜态的成員方法

在非靜态方法中

成員變量:既可以通路靜态成員變量,也可以通路非靜态的成員變量

成員方法:既可以通路靜态的成員方法,也可以通路非靜态的成員方法

繼承:将一些類共性内容抽取出來,封裝到一個獨立的類中,并且讓這個獨立的類和這些類産生一種關系,叫做繼承!

将上述代碼改進:使用繼承

抽象類:

比如動物吃的功能,每個具體的動物吃的功能不一樣,在目前類中隻是給出一個方法聲明(抽象的,不帶方法體)

在一個類中,給出一個抽象功能,就必須将這個類定義為抽象類!

抽象類的格式

abstract class 父類名(animal){

}

抽象方法的格式:

public abstract(必須寫) 方法名() ; //抽象方法

注意:

1)如果一個類中有抽象方法,那麼這個類一定抽象類

2)抽象類中一定有抽象方法嗎? 還可以非抽象的

抽象類的特點:

1)抽象類不能直接執行個體化(不能直接建立對象)

2)子類必須重寫父類的抽象功能

抽象類的子類:

1)抽象類的子類如果是抽象類呢? 沒有任何意義,因為使用的就是通過具體類建立對象,具體類都抽象類,沒意義!

實際工作中:

1)接口多态(用的最多)

2)抽象類多态

3)具體類對象的建立

抽象類成員的特點:

成員變量:

可以是變量,也可以是一個常量(自定義常量)

構造方法:

所有的構造方法都是給對象進行初始話:1)預設初始化 2)顯示初始化

成員方法:

可以是抽象的方法,也可以非抽象的方法

多态:某個事物在不同時刻展現出來的不同狀态!

水: 事物

液态 氣态 固态

多态的前提條件:

1)必須有繼承關系

2)必須方法重寫

貓狗案例:每個動物具體的吃的功能是不一樣,必須有方法重寫,将父類的功能覆寫掉!

3)必須有父類引用指向子類對象 :向上轉型

格式:

父類名 對象名 = new 子類名() ;

多态中的成員通路特點

1)成員變量的通路特點:

編譯看左,運作看左 (左:父類)

2)成員方法(一般沒有強調靜态方法都是非靜态的)的通路特點:

編譯看左,運作看右

3)構造方法:作用:就是給對象進行初始化的

4)靜态的成員方法的通路特點:

編譯看左,運作看左(靜态的成員方法算不上方法重寫,因為靜态的都和類有直接關系!)

多态的好處:

1)提高代碼的擴充性(由多态保證)

2)提高代碼的維護性(由繼承關系)

多态的弊端:

不能通路子類特有功能

最優秀的方式:使用向下轉型:将父類對象強制轉換為子類的引用

子類名 子類對象名 = (子類名)父類的對象;

向下轉型使用不當的時候,會出現一個異常:classcastexceptino:類轉換異常

類的初始化

繼承過程中,分層初始化;首先父類初始化,然後是子類

建立一個類的對象的時候,是通過構造方法建立對象,構造方法的作用:給對象進行初始化話的

繼承中的成員方法通路特點:

子類繼承父類,當成員方法名稱不一緻的時候,分别調用

當成員方法名稱一緻的情況,首先在子類中有麼有該方法,如果有,就調用;如果沒有,就調用父類的成員方法;

法重寫:override:繼承裡面的技術

當子類出現了和父類一模一樣的方法的時候,子類的方法會重寫(覆寫,複寫)父類的方法,調用的子類的功能

方法重載:overload:方法裡面的

在方法中,多個方法名相同,并且他的參數清單不同,與傳回值無關

參數清單不同:

1)參數個數不同

2)參數類型不同

接口:(開發過程中要遵循面向接口程式設計!)

将一些額外(擴充)功能,暴露出來,隻要哪些類實作了這個接口,就一定要取實作接口中的功能!

接口的實作類和接口之間是一種實作關系

class 類名 implements(實作) 接口名{

接口的子實作類:

1)如果接口的實作類是一個抽象類;沒有意義,接口本身不能執行個體化,需要通過子實作類來進行執行個體化,如果子實作類

都被抽象了,不能建立對象了,這種沒意義!

2)接口的實作類是具體類,接口名 對象名 = new 子實作類名() ; 接口多态(推薦方式:開發中這種方式最多)

接口不能執行個體化(不能建立對象)

實際開發中命名規則:

實作類命名規則:接口名+impl :實作類

接口的成員特點:

存在預設的修飾符: public static finla

構造方法:接口中沒有構造方法

預設的修飾符:public abstract

關系的差別:

類與類的關系

extends:繼承關系 單繼承,不能多繼承,但是可以多層繼承

類與接口的關系:implements :實作關系 ,并且一個類繼承另一個類的同時還能實作多個接口

任何類都需要繼承自object類,代表所有類的根類.

形式參數問題

基本資料類型(不做研究,比較簡單)

引用類型

(具體)類 :需要該具體類對象

抽象類的情況:形參是一個抽象類,那麼實際需要該抽象類子類對象 (抽象類多态)

@author administrator

多态: fu f = new zi() ;

方法傳回值的情況:

1)傳回基本類型 :比較簡單 (傳回什麼基本類型資料,用什麼基本類型接收)

string(特殊的引用類型)

2)引用類型:

(具體)類:需要傳回的是該具體類 具體對象(或者匿名對象)

抽象類:需要傳回的是該抽象類的子類對象

抽象類

接口

(具體)類:需要該具體類 具體對象(或者匿名對象)

方法的形式參數

接口類型:需要該接口的子實作類的對象

方法的傳回值

繼續閱讀