抽象類和普通類和接口
- 什麼是抽象類
- 什麼是接口
- 抽象類和接口差別
什麼是抽象類
用abstract修飾的類叫抽象類
1、抽象類不能有對象,抽象類不能執行個體化,不能new
2、abstract修飾的方法為抽象方法,這種方法不能有方法體(什麼内容都沒有)
3、抽象類不能有對象,不能new對象
4、有抽象方法的一定是抽象類,抽象類中不一定有抽象方法
5、抽象類型中的抽象方法必須在子類中被重寫
抽象類不能被執行個體化,抽象方法必須被重寫,定義它們是幹嘛?
抽象類是用來被繼承的,如果沒有類去繼承它,也就失去了意義;抽象方法生來就是被重寫的,必須被重寫。(隻要繼承了某個抽象類,就必須去重寫此類中的抽象方法)
public abstract class Animal{
public abstract void eat();
public abstract void sleep();
}
定義了一個叫Animal的抽象類含有兩個抽象方法,抽象方法後面也不能帶大括号。
之後定義一個Cat類
public class Cat extends Animal{
@Override
public void eat() {
System.out.println("貓吃魚");
}
@Override
public void sleep() {
System.out.println("貓睡覺!");
}
}
在這裡指的注意的是:當一個類繼承抽象類的時候,這個類必須去重寫所繼承的抽象類的抽象方法
什麼是接口
接口是對抽象類的進一步抽象
接口就是某個事物對外提供的一些功能的聲明,通過interface關鍵字完成
注:
1、接口中所有的屬性預設為:public static final。。。;
2、接口中所有的方法預設為:public abstract。。。;
3、接口不需要像類一樣被繼承,而是用implements去實作,類和接口的關系叫實作。
public class Cat implements Sleep,Eat{
@Override
public void ioSleep(int i) {
System.out.println("我是貓,我每天都不用睡覺!!!");
}
@Override
public void ioEat() {
System.out.println("我是貓,我吃貓糧!!!");
}
}
public interface Sleep {
public static int a = 1;
public static int b = 2;
public void ioSleep(int i);
}
public interface Eat {
public abstract void ioEat();
}
抽象類和接口差別
1、實作方法:
抽象類中可以有已經實作的方法,因為存在抽象方法,是以必須是抽象類
接口中隻能包含抽象方法,抽象方法是沒有被實作的,隻能被重寫
2、子類使用的關鍵詞不一樣
抽象類使用extends來繼承,抽象類就是用來被繼承的,所包含的抽象方法也需要被重寫
接口使用implement關鍵字來實作,提供接口中所有聲明方法的實作
(抽象類是将夢想傳給家族,一代一代去完成。那麼接口就是掌門人找大師兄來完成幫派的鴻星偉業,這時候就隻有一次希望,要麼有能力就實作,沒能力就不要接。)
3、是否有構造器(構造函數)
抽象類是類,所有有類的所有特性,是不能被執行個體化,但可以有構造器
接口是不能有構造器的,是所包含的所有抽象方法的集合
4、修飾符
抽象類可以有public、protected、default這些修飾符
接口隻有一個修飾符public
5、運作速度
抽象方法快
接口運作滿,需要時間尋找在類中實作的方法
6、繼承實作
抽象類中一個子類隻能繼承一個父類但是可以有多個接口