Java-abstract抽象類和interface接口

抽象類

抽象類 不可以實例化

抽象類可以有構造器
抽象類可以有main方法,並且我們可以運行它
抽象類 中既可以有抽象方法,也可以有非抽象方法,抽象方法沒有方法體({ } 花括弧) 抽象類可以繼承非抽象類、抽象類
抽象類 可以單個或多個接口,但是隻能繼承一個類 抽象類只能是public、默認修飾,不能使用protected、private修飾
抽象類 中可以定義變量、靜態變量,final變量
抽象類 可以有靜態代碼塊和靜態方法

抽象方法 沒有方法體 抽象方法只存在於接口和抽象類中,普通類不能聲明抽象方法
抽象方法 可以是public、protected、默認,但是不能用private
抽象方法 必須爲public或者protected(因爲如果爲private,則不能被子類繼承,子類便無法實現該方法

繼承 抽象類 效率比 實現 接口 效率比較高

public class AbatractDemo {
	
	abstract class Animal {
		
	}
	
	abstract class Pig extends Animal{
		// 抽象類中變量
		String name;
		static int age = 19;
		final String color = "white";
		
		// 抽象類的構造方法
		public Pig() { }
		// 抽象類的普通方法
		public void eat() { }
		
		// 抽象方法沒有方法體 也就是{}
		public abstract void run();
		// 抽象方法沒有方法體 也就是{}
		public abstract void sleep();
	}
	
	// 繼承抽象類,子類必須重寫父類中的抽象方法
	class ColorPig extends Pig {

		@Override
		public void run() {
		}

		@Override
		public void sleep() {
		}
		
	}
	
	public static void main(String[] args) {
		// 無法實例化抽象類
		// Pig pig = new Pig();
	}
}

接口

接口 不能實例化
接口 沒有構造方法
接口 沒有main方法,因此不能運行它

接口 只能用public和默認,不能使用static、private、protect、final修飾

接口 中的 方法 不能用static修飾
接口 中的 方法 沒有方法體,方法默認的修飾符是 public abstract 接口中變量默認的修飾符是public final static (這三個修飾符不需要順序可以隨便放)

接口 不能實現(implements)接口
接口 不能繼承(extends)類(普通類、抽象類)

接口可以多繼承(extends)接口

實現接口必須重寫接口中的所有方法

接口中的 變量 會被隱式地指定爲 public static final 變量,並且只能是 public static final 變量,用private、protected 修飾會報編譯錯誤
接口中的 方法 會被隱式地指定爲 public abstract 方法,並且只能是 pulic abstract 方法,用其他關鍵字,比如private、protected、static、 final等修飾會報編譯錯誤

接口中不能含有靜態代碼塊以及靜態方法

JAVA8 中接口可以定義非抽象方法,但必須使用default或者staic關鍵字來修飾,必須有方法體{}

public class InterfaceDemo {
	
	interface Animal {
		final public static  int age = 100;
		// 接口中屬性默認的修飾符是 public final static
		String name = "Animal";
		// 接口中的方法沒有方法體
		public void eat();
		// 接口中方法默認的修飾符是 public abstract
		void sleep();
	}
	
	
	class Cat implements Animal{
		
		@Override
		public void eat() {
			System.out.println();
		}

		@Override
		public void sleep() {
		}
	}
}

抽象類和接口相同點

類型 抽象類 接口
方法 抽象方法沒有方法體 接口中所有方法都沒有方法體
實例化 抽象類不能實例化 接口不能實例化

抽象類和接口不同點

類型 抽象類 接口
速度 相對快 相對慢
構造器 抽象方法可以有構造方法 接口沒有構造方法
main方法 抽象類可以有main方法 接口沒有mian方法
繼承或實現 子類使用extends關鍵字來繼承抽象類,如果子類不是抽象類的話,需要重寫抽象類中的抽象方法 子類使用關鍵字implements來實現接口,需要重寫接口中所有方法
與正常Java類區別 抽象類不能實例化,可以有抽象方法,其他和普通方法沒區別 接口不能實例化,接口中定義方法不能有方法體,接口中變量都是靜態不能修改的常量
訪問修飾符 抽象方法可以是public、protected、默認,但是不能用private 接口中的方法默認的修飾符是 public abstract ,不可以使用其它修飾符,接口中變量默認的修飾符是 public final static
多繼承或多實現 抽象類可以繼承(extends)一個類和實現(implements)多個接口 接口不能實現(implements)接口,不能繼承(extends)類(普通類、抽象類),但是可以繼承(extends)一個接口,也可以多繼承(extends)接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章