標籤:final 抽象類別
final關鍵字:概念:
學習了繼承我們發現繼承有一個弊端,就是它會打破封裝性;如果不讓其他類繼承該類,就不會有重寫了,→可以通過Java中的幾個關鍵字來實現,final(最終化)。
final關鍵字是一個修飾符,可以修飾類、方法、變數(成員變數、局部變數、靜態變數)。
什麼時候用?
當程式中一個資料使用時是固定不變的,這時為了增加閱讀性,可以給該資料起個名字,這就是變數,為了保證這個變數的值不被修改,加上final修飾,這就是一個閱讀性很強的常量。書寫規範:被final修飾的常量名所有的字母都是大寫的,如果由多個單片語成,單詞間通過 _ 串連。
特點:
1,final修飾的類是一個最終類,不餓能夠再派生子類(如果類中出現部分可以重寫,部分不可以,只要給指定的方法最終化就可以了);
2,final修飾的方法是最紅方法,不可以被重寫;
3,final修飾的變數是一個常量,只能被賦值一次。
抽象類別:產生:
在描述事物時,沒有足夠的資訊描述一個事物,這時該事物就是抽象事物,它的功能也不具體,這些不具體的功能需要在類中標識出來,使用Java中的關鍵字abstract(抽象)。
定義了抽象函數的類也必須被abstract關鍵字修飾,被abstract關鍵字修飾的類是抽象類別。
特點:
1,抽象類別和抽象方法都需要被abstract修飾,抽象方法一定要定義在抽象類別中;
2,抽象類別不可以建立執行個體,原因:調用抽象方法沒有意義;
3,只有覆蓋了抽象類別中所有的抽象方法後,其子類才可以執行個體化,否則該子類還是一個抽象類別。
【細節問題】
1,抽象類別一定是個父類?
是的,因為不斷抽取而來的。
2,抽象類別是否有建構函式?
有,雖然不能給自己的對象初始化,但是可以給自己的子類對象初始化。
抽象類別和一般類的異同點:
相同:
1,它們都是用來描述事物的。
2,它們之中都可以定義屬性和行為。
不同:
1,一般類可以具體的描述事物。
抽象類別描述事物的資訊不具體
2,抽象類別中可以多定義一個成員:抽象函數。
3,一般類可以建立對象,而抽象類別不能建立對象。
3,抽象類別中是否可以不定義抽象方法。
是可以的,那這個抽象類別的存在到底有什麼意義呢?僅僅是不讓該類建立對象。
4,抽象關鍵字abstract不可以和哪些關鍵字共存?
1,final:
2,private:
3,static:
練習:
需求:公司中程式員有姓名,工號,薪水,工作內容。專案經理除了有姓名,工號,薪水,還有獎金,工作內容
在問題領域中先找尋其中涉及的對象。
程式員
屬性:姓名,工號,薪水
行為:工作
專案經理
屬性:姓名,工號,薪水,獎金
行為:工作
這些對象是否有關係呢?發現了他們之間的共性,應該存在著關係。
可以將他們的共性向上抽取到共性類型:員工。
員工:
屬性:姓名,工號,薪水
行為:工作
發現員工的工作內容本身就不具體。應該是抽象的,由具體的子類來體現的。
abstract class Employee{private String name;private String id;private double pay;/**構造一個員工對象,一初始化就具備著三個屬性。*/public Employee(String name,String id,double pay){this.name = name;this.id = id;this.pay = pay;}/**工作行為。*/public abstract void work();}//具體的子類:程式員。class Programmer extends Employee{public Programmer(String name,String id,double pay){super(name,id,pay);}public void work(){System.out.println("code....");}}//具體的子類:經理。class Manager extends Employee{//特有屬性。private double bonus;public Manager(String name,String id,double pay,double bonus){super(name,id,pay);this.bonus = bonus;}public void work(){System.out.println("manage");}}class AbstractTest {public static void main(String[] args) {System.out.println("Hello World!");}}
————畢老師day09視頻
【Java知識點總結】 final關鍵字與抽象類別