1.1 為什麼使用抽象類
有些類建立物件沒有意義。需要把這個定義為抽象類
1 animal animal=new animal();
2 pet pet=new pet()
抽象類(abstract)不能例項化,只能被繼承。
1.2 abstract 關鍵字
關鍵字:abstract:抽象
可以修飾方法:叫做抽象方法,沒有方法體,需要使用分號表示宣告結束
可以修飾類:叫做抽象類,抽象方法所在的類必須是抽象類
1.3 抽象方法
使用abstract關鍵字修飾,只表示宣告了乙個方法,但是沒有任何的實現
特點:1沒有方法體,需要使用分號表示方法宣告結束
2如果乙個類中有乙個方法是抽象的,那麼這個類必須是抽象的
3抽象類中可以包含抽象方法,也可以不包含
4 抽象方法必須被子類重寫,除非子類也是抽象類
1.4 抽象類:
使用abstract關鍵字修飾
特點:1)抽象類的出現由於類中有抽象方法,但是抽象類中也可以沒有抽象方法
2)抽象類中有構造方法,但是不能建立物件,構造方法目的在子類中會被呼叫
3)抽象類的存在就是為了被繼承,子類必須重寫父類的抽象方法,除非子類也是抽象類。
1.5 抽象類和普通類的區別:
1)抽象類需要abstract,而普通類不需要
2)構造方法:都有,但是抽象類不能例項化物件,普通類可以
3)成員方法:抽象類中可以存在抽象的成員方法也可以存在非抽象成員方法,而普通類中只能存在非抽象成員方法
思考:final和abstract是否可以連用?
1)兩個關鍵字修飾方法時,final修飾的方法特點:可以被繼承不能被重寫;abstract修飾的方法特點:必須被重寫;所以這兩個關鍵字不能同時修飾同乙個方法
2)兩個關鍵字修飾類時:final修飾的類特點:不能被繼承;abstract修飾的類特點:必須被繼承;所以這兩個關鍵字不能同時修飾同乙個類
綜上所述:final和abstract不可以連用
final的類中能否有abstract方法?不能
abstract類中能否有final方法?可以
練習1:
編寫交通工具類,具有前進run()功能,子類有自行車、小轎車、地鐵,重寫父類方法,主人有屬性name,age屬性,方法回家gohome(交通工具),需要使用交通工具,使用抽象類優化程式
traffictool
bicycle
carsubway
master
1.6 static,final,abstract總結
修飾符 修飾物件 規則
static 屬性 表示類公共的屬性,使用類來呼叫,推薦使用類呼叫(類名.屬性名)
方法 表示類公共的方法,在靜態方法中只能直接呼叫靜態變數或靜態方法,不能使用this,super,如果要想呼叫非靜態方法和屬性,需要建立物件。
**塊 靜態**塊,程式一載入靜態**塊就執行,而且只執行一次
final 屬性、區域性變數 常量,final int i=12;或者final int i;i=12;只能賦值一次。
方法 該方法不能被子類重寫,可以被繼承。
類 該類不能被繼承。
abstract 方法 抽象方法,該方法只有方法宣告,沒有方法體
構造方法和static方法、final方法不能是抽象的
有該方法的類稱為抽象類,類名前必須加abstract
類 抽象類不能被例項化
抽象類可以指向子類物件的引用
抽象類可以有普通方法,可以被子類繼承
父類的抽象方法必須在子類中實現,除非子類也是抽象類
第二節: 介面
生活中的介面:usb,插座…
usb:物理:必須滿足usb介面的寬度和厚度
內部:需要遵守磁片的個數
插座:首先需要滿足插頭的個數
滿足電壓和電流一些規則
2.1 介面的概念
從語法上講:介面是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有方法的實現。
從功能上講:介面表示一種約定或能力
2.2 使用介面的好處
擴充套件類的功能,保持對外介面一致
介面實現了多重繼承,完成類和任何實現介面子類的通訊和互動
降低**之間的耦合性
2.3 介面的特點:
1)介面不能建立物件,而且介面中沒有構造方法;
2)介面中的方法一般都是共有抽象方法:public abstract
3)介面中所有的屬性都是共有靜態常量屬性:pulbic static final
在乙個介面中宣告方法時,若沒有宣告訪問許可權,預設也是public,若沒其他修飾預設也是abstract;宣告屬性時,若沒有宣告訪問許可權和靜態常量,預設也是public static final
public abstract void fun();
介面中可以使用一下格式宣告方法:
void fun();
public static final int a = 9;
int a = 9;
2.4 介面的宣告語法
關鍵字inte***ce:表示乙個介面,介面inte***ce和類class是平級關係
語法:public inte***ce 介面名
2.5介面的實現類
介面與類的關係:implements
語法:pulbic inte***ce i
public class impl implements i
}思考:乙個類實現類某個介面之後,是否可以存在父類?
可以,實現介面和繼承類不衝突
注意:若乙個類有父類同時也實現介面,宣告類時,必須先繼承再實現介面
語法:public class dog extends animal implements i
}2.6 介面的分類:
1)普通介面:在介面中可以宣告抽象方法,和靜態常量屬性
2)常量群介面:在介面中只宣告一組靜態常量屬性
3)標誌性介面:在介面中沒有抽象方法,也沒有靜態常量,作用為了標記某個類具有某個功能
2.7 介面和介面的關係:
繼承關係:使用關鍵字extends實現介面與介面的繼承關係
介面繼承的特點:
1)介面中沒有私有成員,所以父類介面中的所有成員都會被子介面繼承
2)父子關係中都是介面,所以在子介面中不需要實現任何的抽象方法
3)介面可以多繼承
思考:現有類a和類b,兩個類中都有fun()方法,類c繼承類a和類b,當使用類c的物件呼叫fun方法時,如何執行?此時不知道執行那個fun方法,所以類不可以多繼承。
現有介面a,b,兩個介面中都有fun方法,介面c繼承a,b,由於介面中的沒有方法體,所在只要在介面c中存在了fun方法即可
所以介面支援多繼承
2.7 介面中特殊的方法:
1)在介面中使用static關鍵字修飾的方法有方法體
靜態方法需要有方法體
2)jdk1.8之後新增功能:
在介面中使用default關鍵字修飾的方法有方法體
2.8 介面的使用:
1.usb介面
public inte***ce usbinte***ce
public class fan implements usbinte***ce
}public class mouse implements usbinte***ce
}public class computer 2.在乙個平台或系統中,如果多個類都需要使用到某些方法,可以將這些方法定義到乙個介面中,所有需要這些方法的類,可以實現這個介面,有效地實現解耦。
案例:現有交通工具類transport類
transport有三個子類,飛機plane,車car,船ship
plane有,客機,貨機,戰鬥機
car有客車,貨車,坦克
船有客船,貨船,航母
戰鬥機,坦克,航母都有**攻擊的功能,通過分析,此功能不能來自於父類,所以可以講**攻擊的功能設定在乙個介面中
//交通工具類
public class transport
}//飛機類
public class plane extends transport {}
//船類
public class ship extends transport {}
//車類
public class car extends transport {}
//**攻擊介面
public inte***ce fire
//航母類:繼承ship,實現fire
public class carrer extends ship implements fire
}//戰鬥機:繼承plane,實現fire
public class fightingplane extends plane implements fire
}//坦克類:繼承car,實現fire
public class tank extends car implements fire
}//測試
public class testtransport
}2.9 抽象類和介面區別
語法:1>抽象類使用abstract,介面使用inte***ce
2>抽象類中可以包含抽象方法,也可以不包含,介面中只能包含抽象方法和靜態常量,jdk1.8之後介面可以包含靜態方法和預設方法。
3>抽象類和介面都不能例項化。
4>抽象類可以包含構造方法,介面中沒有構造方法。
功能:1>抽象類一般用來表示同類事物,介面可以表示不是同類事物。
2>抽象類可以實現**的重用,也可以約束子類的功能。介面就是約束實現類的功能,降低**之間的耦合性。
介面和抽象類
介面和抽象類 今天自學了一下介面,從第一次接觸介面又進一步理解介面的原理。想到介面或許我們更多的是想到和類的對比,而類中抽象類和介面又更為相似。現在我講下我對介面和抽象類的理解。如果單從具體 來看,對這兩個概念很容易模糊,甚至覺得介面就是多餘的,因為單從具體功能來看,除多重繼承外 c 抽象類似乎完全...
抽象類和介面
抽象類 1.是一種特殊的類,除了不能被例項化外,具有類得其他特性.2.抽象類的方法可以不宣告為abstract,此時可以實現方法提 如果宣告為abstract,則不可以實現方法體,只能宣告,如 public abstract int remove int i,int j 此時類必須宣告為抽象 3.乙...
抽象類和介面
1.抽象類 含有abstract修飾符的類即為抽象類。可用於實現 重用。抽象類與普通類的唯一區別 不能建立例項物件 允許有抽象方法,但不必須是抽象的。抽象類中定義的抽象方法必須在具體子類中實現,所以不能有抽象構造方法或抽象靜態方法 如果沒有全部實現抽象父類的抽象方法,子類也要定義為抽象型別。2.介面...