2020 08 14 繼承and抽象

2021-10-09 04:56:15 字數 3033 閱讀 8028

super的三種用途

1. 可以訪問父類的成員變數。

super.成員變數

2. 可以訪問父類的成員方法

super.成員方法()

3. 可以訪問父類的構造方法

super();

this的三種用途:

1. 可以訪問本類中的成員變數。

this.成員變數

2. 可以訪問本類中的成員方法

this.成員方法()

3. 可以訪問本類中的構造方法。

this(引數);

如果this呼叫構造方法,也必須放在第一行

employee

/* 我們可以將多個類(子類)中的共性向上抽取,抽取到另乙個類(父類)中。

子類繼承父類,會自動擁有父類所有的成員(私有成員也能繼承,不過無法直接訪問)

繼承的格式:

public class a {}

public class b extends a {}

上面**表示b類繼承了a類,b是子類,a是父類,b類會自動擁有a類所有的成員。

*/public class employee

teacher

/* 講師類

*/public class teacher extends employee

}assistant

/* 助教類

*/public class assiatant extends employee

}demotest

/* 測試類

*/public class demo01test

}

匿名物件顧名思義就是沒有名字的物件,如果我們建立了乙個物件但是在左邊沒有用變數接收這個物件,那麼就是乙個匿名物件。

比如建立物件的格式:

資料型別 物件名 = new 資料型別();

如果上面格式只寫了右邊,沒有寫左邊,那麼就是乙個匿名物件。

好處: 匿名物件可以稍微簡化我們的操作。

匿名物件的使用場景:

1. 如果某個物件我們只需要用一次,那麼可以使用匿名物件【匿名物件沒有接受,用完之後就找不到了】

2. 當做方法引數進行傳遞。

繼承關係中成員變數的訪問特點:

通過子類訪問成員,子類沒有,會向上找父類。

通過父類訪問成員,父類沒有,不會向下找子類。

父類和子類成員變數同名時的訪問特點(了解):

直接訪問(通過子類物件直接訪問):

使用的是子類自己的成員。

間接訪問(通過方法的方式去訪問)

呼叫的是哪個類中的方法,訪問到的就是哪個類中的成員變數。

繼承中成員方法的訪問特點

如果子類中的成員方法和父類中的成員方法同名,那麼通過子類物件訪問成員方法,訪問的是子類中定義的成員方法。 如果子類**現了和父類一模一樣的方法,那麼這個就叫做方法的重寫。

重寫和過載的區別:

過載: 方法名,引數列表不同。

重寫: 在子類**現了和父類一模一樣的方法。

方法重寫的注意事項:

1. 子類在重寫父類方法時,引數列表必須相同。

2. 子類重寫父類方法時,子類方法的許可權一定要大於等於父類方法的許可權【了解】

public > protected > 預設 > private

預設許可權指的是省略不寫,如果省略許可權修飾符,那麼方法就是預設許可權。

3. 私有的方法不能被重寫

一般來說,方法重寫時,許可權修飾符,返回值型別都是一致的。

在繼承關係中構造方法的注意事項:

1. 構造方法不能繼承。

2. 建立子類物件時會先執行父類的構造方法,然後執行子類的構造方法。 原因是因為在子類構造方法的第一句有乙個隱藏的super(),是在呼叫父類的空引數構造方法

3. 我們也可以使用super關鍵字手動呼叫父類的構造方法。

super(引數)

4. 如果使用super呼叫構造方法,那麼只能放在第一行。

動物類。

動物有吃的行為,但是動物吃什麼,我們是說不清的, 這種說不清道不明的方法,我們可以定義成抽象方法。

抽象方法:

使用abstract修飾,沒有方法體。

抽象方法格式:

public abstract 返回值型別 方法名(引數);

抽象類:

抽象方法存在的類必須是乙個抽象類。抽象類就是使用abstract修飾的類。

抽象類的格式:

public abstract class 類名 {}

抽象類的使用:

1. 抽象類不能建立物件。

2. 抽象類是給子類用的,我們要定義乙個子類去繼承抽象類。

3. 重寫抽象類中的所有的抽象方法。

4. 建立子類物件,通過子類物件呼叫方法。

抽象類的注意事項:

1. 抽象類不能建立物件

2. 抽象類中也是有構造方法的,抽象類中的構造方法是給子類用的。

3. 抽象類中可以有抽象方法,也可以有非抽象的方法。

抽象方法所在的類必須是乙個抽象類。

4. 乙個普通類在繼承抽象類時,必須重寫這個抽象類中所有的抽象的方法。

乙個抽象類在繼承抽象類時,可以不重寫抽象類中的抽象方法。

5. 抽象類的目的是為了讓子類繼承,體現的是模板思想。

模板方法模式

將固定的流程定義在父類中,不同的地方使用抽象方法,讓子類繼承重寫

如果final修飾類,這個類不能被繼承,但是這個類可以繼承其他類。

如果final修飾方法,這個方法不能被重寫,但是可以被子類繼承使用。

如果final修飾變數,這個變數的值不能被改變,從效果上看,這個變數也就變成了常量。

如果final修飾的是區域性變數,那麼變數的值只能賦值一次,一旦賦值就不能更改了。

如果final修飾的是成員變數,該變數也是只能賦值一次,一旦賦值不能更改。

final修飾的成員變數,必須在建立物件之前完成賦值(可以直接賦值,也可以構造方法中賦值) 

常量的命名規範:所有字母都大寫,如果有多個單詞,多個單詞之間使用下劃線隔開。比如: aaa_bbb_ccc

繼承 介面 抽象

繼承是物件導向最顯著的乙個特性。繼承是從已有的類中派生出新的類,新的類能吸收已有類的資料屬性和行為,並能擴充套件新的能力 抽象方法是一種特殊的方法 它只有宣告,而沒有具體的實現 介面泛指供別人呼叫的方法或者函式 抽象類與介面的方法 1 抽象類可以提供成員方法的實現細節,而介面中只能存在public ...

抽象和繼承

抽象應該盡可能有多的共同 而擁有盡可能少的資料,乙個物件從超類繼承來的 在不使用的時候不會造成資源浪費,而資料的移動是從抽象到具體,乙個物件的資料不論是否使用都會占用資源。繼承關係分為 類對介面的實現和類對類的繼承,只要有可能盡量使用合成,而不要使用繼承達到復用的目的 使用繼承關係 1 子類是超類的...

繼承 抽象 多型

繼承 在php中,使用extends實現繼承,子類 派生類 繼承父類 基類 繼承是為了擺脫重複 繼承 析構方法 子類繼承父類時,子類沒有構造方法,例項化子類物件時,會執行父類的構造方法。子類如果有自己的構造方法,例項化子類物件時,只會自動執行子類自己的構造方法。在子類的構造方法中,使用 parent...