天天看點

簡述抽象類和接口、抽象類差別的差別什麼是抽象類什麼是接口抽象類和接口差別

抽象類和普通類和接口

  • 什麼是抽象類
  • 什麼是接口
  • 抽象類和接口差別

什麼是抽象類

用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、繼承實作

抽象類中一個子類隻能繼承一個父類但是可以有多個接口