java_DAY14:介面和抽象類
1:抽象類和普通類的區別
1:抽象方法介紹
當父類的某些方法不確定時,或者每一個子類都有不同的表現形式的時候,可以用abstract關鍵字來修飾該方法。
被abstract修飾,沒有方法體的方法,就叫抽象方法,
特點:
1、抽象方法沒有方法體,只有方法的宣告
2、如果一個類中存在抽象方法,那麼這個類必須要宣告為抽象類
如果父類中有一個方法,每一個子類都有不同的實現,此時可以將這個方法宣告為抽象方法,抽象方法是沒有方法體的,只是一種規範。
Pet類中的toHospital() 方法不需要具體的實現,而且實現後沒有任何意義,此時可以將Pet類中的toHospital()宣告為抽象方法;
什麼是抽象方法:被abstract修飾的方法,就是抽象方法。
1、抽象類為什麼不能例項化?- 不能例項化,抽象類中可能會存在抽象方法,抽象方法是不完整的方法,沒有方法體,如果被呼叫,完全沒有意義
2、抽象類中是否可以存在構造方法? - 可以存在,他不能例項化,構造方法有什麼用? -- 留給子類呼叫的
3、抽象類和抽象方法的關係? - 抽象方法必須在抽象類中進行宣告,抽象類中可以存在抽象方法,也可以不存在
4、什麼是抽象類? - 被abstract修飾的類就是抽象類,特點:不能例項化
5、抽象類能不能繼承普通類? - 可以。
6、普通類能不能繼承抽象類? - 可以
7、抽象方法和普通方法的的區別!
1、抽象方法沒有方法體,普通方法一定要有方法體
2、抽象方法一定要有abstract修飾,普通方法一定不能有
3、抽象方法只能在抽象類中,普通方法既可以在抽象類中也可以在普通類中
4、被繼承時,抽象方法必須要被子類重寫,普通方法沒有要求
8、抽象類和普通類的區別?
1、抽象類不能被例項化,普通類可以
2、抽象類需要有abstract修飾,普通類不能
3、抽象類可以有抽象方法,普通類一定不能存在抽象方法
9、是否存在抽象的構造方法? - 不存在,
10、是否存在抽象的靜態方法? - 不存在
11、抽象類中是否存在靜態方法? - 可以存在的,靜態方法不需要物件來呼叫,直接通過類名既可以直接訪問
12、關於繼承,跟是否抽象無關,都可以互相去繼承
語法:方法體,呼叫
特徵:
1:抽象方法沒有方法體,只有方法的宣告;
2:如果一個類中存在抽象方法,那麼這個類必須宣告為抽象類;abstact修飾的類,抽象類不能建立物件
3:抽象類不能被例項化;
4:抽象方法必須在子類中被重寫,除非子類也是抽象類;
如:
// 抽象類
public abstract class Pet{
//抽象方法
public abstract void toHospital();
}
2、抽象類和抽象方法的關係
1:有抽象方法的類,一定是抽象類,但抽象類不一定有抽象方法;
2:一個類繼承抽象類,必須重寫抽象類中的所有抽象方法,如果沒有全部重寫,那麼子類必須宣告為抽象類
3:沒有抽象構造方法,也沒有抽象靜態方法
4:抽象類中可以有構造方法,建立子類的例項時呼叫
1、抽象類和普通類的區別 - 記住3條以上
1、語法不同,抽象類是被abstract修飾的類,普通類一定不能被abstract修飾;
2、抽象類中可以有抽象方法,普通類一定不能有抽象方法;
3、抽象類不能被例項化,普通類可以去例項化呼叫;- 建立物件
4、抽象類被繼承時,子類必須重寫全部的抽象方法,或者將子類宣告為抽象類;普通類繼承普通類的時候,沒有任何限制;
2:介面
1:什麼是介面
介面(英文:Interface),在JAVA程式語言中是一個抽象型別,是抽象方法的集合(介面中的所有的方法都是抽象方法),介面通常以interface來宣告。
介面是一個特殊的類,這個類中只能存值抽象方法,為了和普通的類去做區分,同時彌補java單繼承的缺陷,把這個特殊的類叫介面,使用interface宣告介面
一個類通過實現介面的方式,從而來實現介面的抽象方法。
介面並不是類,編寫介面的方式和類很相似,但是它們屬於不同的概念。類描述物件的屬性和方法。介面則包含類要實現的方法。
除非實現介面的類是抽象類,否則該類要定義介面中的所有方法。
介面無法被例項化,但是可以被實現。一個實現介面的類,必須實現介面內所描述的所有方法,否則就必須宣告為抽象類。另外,在 Java 中,介面型別可用來宣告一個變數,他們可以成為一個空指標,或是被繫結在一個以此介面實現的物件。
2:介面的宣告
宣告介面的語法:
public interface MyInterface {
public abstract void eat(); // 介面中的所有方法都是抽象方法;
void run(); // 可以省略前面的修飾
}
3:介面的特點
1、介面不能用於例項化物件。
2、介面沒有構造方法。
3、介面中所有的方法必須是抽象方法。預設為:public abstract
4、介面不能包含成員變數,除了 public static final 常量。
5、介面不是被類繼承了,而是要被類實現。實現使用關鍵字:implements
6、介面支援多實現。
7、一個類可以繼承一個類的同時實現多個介面。
3:使用介面
使用介面的步驟:
1、建立介面,宣告方法
2、建立類,實現介面,實現介面中的方法
3、使用實現後的方法執行具體的操作
4:介面與抽象類的區別
1、抽象類使用關鍵字abstract class修飾,介面使用關鍵字interface;
2、抽象類使用關鍵字extends實現繼承,介面使用implements來實現
3、抽象類中可以包含抽象方法和普通方法,介面中只能有抽象方法(1.7);
4、抽象類可以有構造方法,介面中不能有構造方法;
5、抽象類可以有成員變數,介面中只能有常量;
6、抽象類只能單繼承,介面可以多繼承;
7、抽象類裡面的方法可以是public,protect,private,介面的方法只能是public;