關於抽象類:
abstract:抽象的
可以修飾:類,成員方法
修飾的類:抽象類
抽象類的特點:抽象類中可以有抽象方法也可以沒有抽象方法
1.構造方法:
抽象類中允許有構造方法,但是抽象類不能創建本類對象,抽象類中的構造方法是給成員變量賦值或去加載抽象類的父類
2.成員變量:
抽象類中允許有成員變量
3.自定義常量:
抽象類中允許有自定義常量
4.普通方法:(普通方法和普通的靜態成員方法)
抽象類中允許有普通方法
5.抽象方法:
抽象類中可以有抽象方法也可以沒有抽象方法
抽象類的使用:一般是作爲父類存在,當父類中的某個方法子類們實現的方式各不相同,所以要把父類中的該方法定義成抽象方法;
子類繼承抽象類:
1.要麼實現抽象父類中所有的抽象方法;-->空實現也是實現
2.要麼把自己也變成抽象類;
修飾成員方法:抽象方法
抽象方法必須存在於抽象類或者接口中;
關於接口:
接口:比抽象類更抽象的類
接口的定義格式:
public interface 接口名{
}
接口中的成員:
構造方法:接口不可以直接創建對象,也沒有構造方法;
JDK1.7之後:
1.接口中只能有自定義常量
2.接口中只能由抽象方法
JDK1.8之後:
1.接口中增加 默認方法
格式:
public default 返回值類型 方法名(形式參數列表){
方法體;
return 返回值;
}
作用:補充接口中以前沒有完成的功能;
使用:
1.接口的子類對象直接調用
2.當子類實現父接口的時候可以不重寫父類的默認方法;
2.接口中增加 靜態方法
格式:
public static 返回值類型 方法名(形式參數列表){
方法體;
return 返回值;
}
作用:補充接口中以前沒有完成的功能;
使用:
1.只能使用接口名直接調用;
JDK1.9之後:
1.私有方法:
格式:
private 返回值類型 方法名(形式參數列表){
方法體;
return 返回值;
}
作用:只爲接口中的默認方法和靜態方法服務
接口的使用:
格式:
public class 子類名 implements 接口名1,接口名2..{
}
注意:
子類可以實現多個接口,實現多個接口要實現接口中所有的抽象方法或者把子類自己也變成抽象類;
一個類繼承一個父類還要實現多個接口的格式:
public class 子類名 extends 父類名 implements 接口名1,接口名2..{
}
接口的好處:
1.打破了繼承的單一性
2.拓展了程序的功能
3.約束了子類(實現類)的行爲
接口的思想:
1.提供規則,規範 所以接口中的成員都被 public 修飾
2.從父類往子類看:約束了子類的行爲
3.從子類往父類看:拓展了子類的功能
類與類,類與接口,類與抽象類,接口與接口之間的關係:
類與類之間的關係:繼承關係 單一繼承,多層繼承
類與抽象類之間的關係:繼承關係 單一繼承,多層繼承
類與接口之間的關係:實現關係 多實現
接口與接口之間的關係:繼承關係(Java中特殊的繼承) 多繼承
抽象類和接口的區別:
不同點:
1.構造方法:
抽象類中允許有構造方法
接口中沒有構造方法
2.成員變量:
抽象類中允許有成員變量
接口中不允許有成員變量
3.自定義常量:
抽象類中允許有自定義常量
接口中只能有自定義常量
4.普通成員方法:
抽象類中允許有普通方法
接口中不允許有普通方法
5.抽象方法:
抽象類中可以有抽象方法也可以沒有抽象方法
接口中只允許有抽象方法
相同點:
1.接口和抽象類都不可以創建對象;
2.接口和抽象類中都可以有抽象方法;
3.接口和抽象類一般都是作爲父類存在;
什麼時候用抽象類 什麼時候用接口:
當一個類 需要有 成員變量和普通方法和抽象方法的時候,只能選抽象類;
當一個類只有自定義常量和抽象方法,可以選接口