java學習第八天之抽象。繼承和多型

2021-07-28 02:46:20 字數 4514 閱讀 7719

public class abstract }/*

* 描述

*  狗:吼叫 

*  狼:吼叫

*   兩個事物具備共性,向上抽去,

*   犬科,具備吼叫功能

* * 描述乙個事物,卻沒有足夠資訊,這時就將這個事物成為抽象事物 面對抽象的事物,雖然不具體,但是可以簡單化 不用面對具體事物

** 特點: 1.抽象方法一定定義在抽象勒種,都需要用abstract來修飾 抽象類不能例項化,不能用new關鍵字建立物件

* 只有子類覆蓋了所有的抽象方法後,子類具體化,子類就可以建立物件 如果沒有覆蓋所有的抽象方法,那麼子類還是乙個抽象類

** 抽象類也是不斷地向上抽取而來的,抽取了方法的宣告而不確定具體的方法內容 由不同的子類來完成具體的方法的內容**

* 問題: 抽象類中有建構函式嗎?

*  有,抽象類的建構函式雖然不能給抽象類物件例項化,因為抽象類不能建立物件

* 但是抽象類有子類,她的建構函式可以讓自樂的物件例項化

** 抽象類和一般類的異同點? 

* 相同:都用來面熟事物,都可以進行屬性和行為的描述

*  不同:抽象類描述事物的資訊不具體。一般類描述事物的資訊具體

* **的不同:抽象類可以定義抽象方法,一般類不行 抽象類不可以例項化,一般類可以

** 抽象類一定是乙個父類嗎?

*  是的。必須需要自雷覆蓋抽象方法後,才可以例項化,使用這些方法

** 抽象類中可以不定義抽象方法嗎? 可以的。僅僅是讓該類不能建立物件

** 抽象關鍵字abstract和哪些關鍵字不能共存呢? 

* final 修飾的類不能有子類 

* abstract  類的例項化必須依靠子類 

* private   如果抽象父類私有化,子類不能修改父類的方法,必須重寫 static 靜態類不能建立物件,直接通過類名呼叫方法,而抽象類通過類名呼叫方法沒有意義

*//*

* 需求:公司中程式設計師有姓名,工號,薪水,還有獎金,工作內容 對給出需求進行資料建模 分析:

* 問題領域中:

*  程式設計師

*   屬性:姓名,工號,薪水 

*  行為:工作內容

* 專案經理

*  屬性:姓名,工號,薪水,還有獎金 

*  行為:工作內容

* * 兩者不存在所屬關係,但是有共性內容,可以向上抽取 兩者的共性型別是什麼?

* 雇員

*  雇員: 屬性:姓名,工號,薪水

*   行為:工作

*/class employee

}// 描述程式設計師

class programmer extends employee

public void work()

}// 描述經理

class manger extends employee }/*

* 抽象類中的所有方法都是抽象的 這時,可以把抽象類用另一種形式來表示。

* 介面 初期可以理解為 介面是特殊的 

* 介面的特點: 

* 1、介面不可以例項化

* 2、需要覆蓋了的介面中的所有的抽象方法的子類,才可以例項化 否則,該類還是乙個抽象類 

* 3、介面是用來被實現的 類與類之間的關係 繼承關係

* 類與介面之間的關係是實現關係 介面與介面之間是 繼承關係

* * 介面的好處或者解決了什麼問題? 

* 多繼承:

*//*

* 介面的思想:

* 筆記本地懊惱的usb的介面

* 1、介面的出現擴充套件了功能

* 2、介面其實就是暴露出來的規則

* 3、介面的出現降低了耦合性,解耦

* */

//介面的出現,一方在使用介面,一方在實現介面

class mouse

inte***ce usb

class newmouse extends mouse implements usb

// 定義介面

inte***ce inter1

inte***ce inter2

inte***ce inter3 extends inter1, inter2

/** 因為繼承factory具備所屬的體系具備了該體系的基本功能 還想擴充套件一些功能,具備show2()的功能 乙個類繼承乙個類的同時,還可以實現多個介面

* 避免了單繼承的侷限性 繼承是為了獲取體系的基本功能,想要擴充套件功能可以通過實現介面來完成

*/// 介面與介面 之間是繼承關係,而且是多繼承

class factory implements inter1, inter2

public void show1()

public void show2()

}class worker

public void show2()

public void show3()

}/*//demoa和demob為了實現介面inter1.必須實現inter1下所有的方法,下面以建立空類初始化其方法來實現介面

class demoa implements inter1

public void show()

}class demob implements inter1

public void show()

}*//*

* 為了方便建立inter1介面的子類物件 可以用乙個類先把介面中的所偶遇方法都空實現,該類建立的獨享沒有意義,所以可以將該類抽象

*///沒有抽象方法的抽象類

abstract class demo implements inter1

public void show()

public void show1()

}class demoa extends demo

}class demob extends demo

}//抽象類與介面

//例子:

abstract class 犬

/*inte***ce 犬*/

//新增乙個功能。緝毒:單獨描述乙個緝毒功能犬

class 緝毒犬 extends 犬

void 叫() {}

}/*class 緝毒犬 implements 犬

void 叫() {}}*/

//緝毒犬是犬中的一種是  is a 的關係

//犬用於描述所有功能犬的基本功能,用class定義。父類

//所以犬不適合定義成介面

class 緝毒豬

}/*具備緝毒功能的有很多,緝毒功能需要抽取,抽取到類中,還是抽取到介面中?

都試一下。先定義成類

abstract class 緝毒

不行,因為緝毒犬繼承緝毒類就不能繼承其他類。因為累不能多繼承

定義成介面試試*/

inte***ce 緝毒

/*class 緝毒犬 extends 犬 implements 緝毒*/

/*這是可行的

類用於描述的是事物的共性基本功能

介面用於定義的都是事物的額外功能

*抽象類和介面的區別?

*1、類與類之間是整合的關係  is a

*類與介面是實現關係    like a

**2、抽象類中可以定義抽象和非抽象方法,子類可以直接使用,或者覆蓋使用

*介面中定義的都是抽象方法,必須實現才能用

*//*多型:多種形態

* 重點說的是:物件的多樣性

* * */

class 動物

class 狗 extends 動物

/*狗  x= new 狗();

動物  x = new 狗();//狗例項即是狗型別,又是動物型別。多型性

多型在程式中的體現:父類的引用或者介面的引用指向了子類的物件

多型在程式中的體現:父類的引用或者介面的引用指向了子類的物件

多型的好處:提高了**的擴充套件性

多型的弊端:不能使用子類的特有方法

多型的前提:

必須有關係,繼承,實現

2.通常有覆蓋

*/abstract class animal

class dog extends animal

}/*呼叫是

animal a= new dog();向上轉型  左邊是父型別。向上轉型的好處,吟唱了子型別,提高了**的擴充套件性

弊端:只能使用父類中的功能,不能使用子類特有的功能,功能被限定了

如果不需要面對子型別,通過提高擴充套件性,或者使用弗雷德功能即可完成操作,就使用向上轉型

如歸想要使用子類特有的功能呢?這就需要向下轉型

dog dog=(dog) a;//向下轉型

向下轉型的好處:可以使用子型別特有的功能

弊端:面對具體的子型別。向下轉型有風險。容易發生classcastexception.只要轉換型別和物件型別不匹配就會發生

想要安全,必須要進行判斷,判斷乙個物件是否匹配某一型別

需要使用乙個關鍵字  instanceof 物件  instanceof 型別

什麼時候用向下轉型,需要用子型別特有方法時,但一定要判斷

*/class cat extends animal

}

java學習筆記 第八天

01.物件導向 多型概念 定義 某一類事物的多種表現形式。可以理解為事物存在的多種體現形態。02.物件導向 多型 擴充套件性 多型的體現 父類的引用指向了自己的子類物件。父類的引用也可以接受自己的子類物件。如 father father new sun 多型的好處 多型的出現大大的提高了程式的擴充套...

9 18 java學習第八天

1.util.collections.sort list 集合list排序 要實現引用型別排序使用compareto 方法,返回值為正數,負數,0,但須實現compareable介面 2.string 低層是用char型陣列實現,存放於方法區的字串常量池中 3.string s1 1 s2 2 s1...

java學習第八天(static靜態)

1.修飾變數 變數存在靜態儲存區,被多個例項共享,能被類名直接訪問 靜態變數是跟隨類的載入而載入,生命週期跟著類一起建立和消亡 2.可以修飾方法 靜態方法可以用類名直接呼叫,一般工具類中的方法都是靜態的,方便使用靜態方法是跟隨類的載入而載入 注意 不能使用this方法,因為當靜態函式載入的時候thi...