Java--抽象類,接口

自從貓狗霸佔我的牀之後,無事可做,就被迫學習。。。。。

Java中定義的沒有方法體的方法,稱該方法爲抽象方法,包含抽像方法的類稱爲抽象類。
當類中的方法不確定有什麼內容時,可以先使用一個抽象類

//例如
abstrack class Animal{
	//抽象方法沒有大括號{},並且前有abstract關鍵字所修飾
	public abstrack void eat();     	
}
abstrack class Cat extends Animal{
	/*當繼承的父類裏出現抽象方法時,繼承方式有兩種:
	1.子類應被abstract所修飾
	2.父親中所有抽象方法要重寫
	*/
	void eat(){
	                                 
	}
}
public static void main(String[] args)
{
	//Animal a=new Animal();      會報錯,抽象類無法實例化
	
}
抽象類的特點
  • 抽象類中可以有構造方法
  • 抽象類中可以定義不是抽象類的方法
  • abstract 使用時不能與public static final等關鍵字同時使用
  • 抽象類一定是個父類
接口

特殊的抽象類
格式
interface 接口名{}
接口中成員修飾符是固定的。
成員變量:public static final
成員函數:public abstract

//接口類似於繼承但不同,類與接口之間是實現關係
//接口不能實例化對象
interface A{
	public static final string name="zs";
	public abstract void eat();
}
//實現接口A,A中有抽象函數,處理方法與繼承相同,有兩種
class B implements A{
	public void eat();         //在這我選重寫這一方式
}
interface C{

}
//子類在繼承一個類的同時,還可以實現多個接口
//優點,避免了單繼承的侷限性
//要先繼承一個類再實現接口
class D extends B implements A,C{

}
//類與類之間是單繼承,接口與接口之間是多繼承
interface E extends A,C{
}
接口的應用

舉個栗子
在這裏插入圖片描述
這裏我們可以從底層不斷尋找共性向上層抽取。這種可以用繼承關係來處理
在這裏插入圖片描述
當對象擁有多個技能時,這是用接口來實現

來寫代碼吧

class Person{
	String name;
	String sex;
	void eat()
	{
		System.out.println("人要吃飯。");
	}
	void sleep()
	{
		System.out.println("人要睡覺。");
	}
}
abstract class Student extends Person{          //我不會用英語寫運動員so臨時改成學生和老師        
	abstract void learn();
}
abstract class Teacher extends Person{
	abstract void teach();
}
interface A{
	void LearnEglish();
}
class Bstudent extends Student implements A{
	public void learn(){
		System.out.println("學習籃球");
	}
	public void LearnEglish()
	{
		System.out.println("學英語");
	}
}
class Bteacher extends Teacher{
	public void teach(){
		System.out.println("教籃球");
	}	
}

class Demo1{
	public static void main(String[] args)
	{
		Bstudent s=new Bstudent();
		s.learn();
		s.LearnEglish();
	}
}

總結抽象類和接口
相同:都是將相同的東西抽取出來
不同:

  • 抽象類需要被繼承,接口需要被實現
  • 抽象類只能單繼承,接口可以多實現
  • 抽象類可以有抽象和非抽象的方法,接口只能是抽象方法
  • 抽象類的繼承,是該體系中基本共性的內容,接口是該體系中額外的功能
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章