Java 抽象類 接口
抽象
抽象方法定義的格式:
public abstract 返回值類型 方法名(參數);
抽象類定義的格式:
abstract class 類名 {
}
public abstract class Fu {//抽象類 public abstract void work();//抽象方法 public void eat() {//抽象類可以放普通類 System.out.println("吃飯"); } } public class Zi extends Fu{ public void work() { System.out.println("java工程師在工作"); } } public class Zi2 extends Fu{ public void work() { System.out.println("Android工程師在工作"); } }
特點
1、抽象類和抽象方法都需要被abstract修飾。抽象方法一定要定義在抽象類中。
2、抽象類不可以直接創建對象,原因:調用抽象方法沒有意義。
3、只有覆蓋了抽象類中所有的抽象方法後,其子類才可以創建對象。否則該子類還是一個抽象類。
註意
1、抽象類一定是個父類 因為不斷抽取而來的。
2、抽象類中可以定義普通方法。那這個抽象類的存在的意義是不讓該類創建對象,方法可以直接讓子類去使用
3、abstract 不能和 private(矛盾) 、final(常量) 、 static 一起用
接口
接口是功能的集合
接口只描述所應該具備的方法,並沒有具體實現
這樣將功能的定義與實現分離,優化了程序設計
接口定義時需要使用interface關鍵字
定義接口所在的仍為.java文件,雖然聲明時使用的為interface關鍵字的編譯後仍然會產生.class文件
定義格式:
public interface 接口名 {
抽象方法1;
抽象方法2;
抽象方法3;
}
接口中的方法均為公共訪問的抽象方法
接口中無法定義普通的成員變量
類實現接口。實現的動作類似繼承,只是關鍵字不同,實現使用implements
格式
class 類 implements 接口 {
重寫接口中方法
}
接口中成員的特點
1、接口中可以定義變量,但是變量必須有固定的修飾符修飾,public static final 所以接口中的變量也稱之為常量,其值不能改變。後面我們會講解static與final關鍵字
2、接口中可以定義方法,方法也有固定的修飾符,public abstract
3、接口不可以創建對象。
4、子類必須覆蓋掉接口中所有的抽象方法後,子類才可以實例化。否則子類是一個抽象類。
接口的多實現
public interface Fu { public abstract void work(); } public interface Zi { public abstract void eat(); } public class Zi2 implements Fu,Zi{ public void eat() { } public void work() { } }
類繼承類並實現接口
public abstract class Fu {//抽象類 public abstract void work();//抽象方法 } public interface Zi { public abstract void eat(); } public class Zi2 extends Fu implements Zi{ public void eat() { } public void work() { } }
接口的多繼承
public interface Fu {//抽象類 public abstract void work();//抽象方法 } public interface Zi{ public abstract void eat(); } public interface Zi2 extends Fu,Zi{ public abstract void sleep(); }
抽象類與接口的區別
1.抽象類中可以有普通成員變量,接口中沒有普通成員變量
2.抽象類可以有構造方法,接口中不能有構造方法
3.抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
4. 抽象類中可以包含靜態方法,接口中不能包含靜態方法
5. 抽象類中的抽象方法的訪問類型可以是 public,protected ,
但接口中的抽象方法只能是 public 類型的,並且默認即為 public abstract 類型
6. 一個類可以實現多個接口,但只能繼承一個抽象類。
7. 抽象類和接口中都可以包含靜態成員變量,抽象類中的靜態成員變量的訪問類型可以任意,
但接口中定義的變量只是public static final 類型,並且默認即為 public static final 類型。
應用
//定義抽象狗類 public abstract class Dog { public abstract void eat(); public abstract void wang(); } //定義緝毒接口 public interface Look { public void look(); } //定義緝毒狗 public class Jd_Dog extends Dog implements Look{ public void eat() { System.out.println("能吃"); } public void wang() { System.out.println("能汪汪叫"); } public void look() { System.out.println("找毒品"); } }
Java 抽象類 接口