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...