一、定義
抽象類是一種不能被實例化的類,其中可以包含未實現的方法和已實現的方法,但是必須用abstract關鍵字修飾。
接口是一種只能包含全局靜態常量和全局抽象方法的類型,其中所有的方法必須是公共的且未實現的。
二、用途
抽象類作為一種中間層的角色,被用來聲明標準化方法以及聲明需要由其子類實現的方法。
接口被用來定義可以被不同類實現的規範。
三、繼承
一個類只能繼承一個抽象類,但是可以同時實現多個接口。
接口可以被接口繼承,並且一個類也可以同時實現多個接口。
四、構造器
抽象類可以包含有參構造器,但是不能被實例化。它們的構造器僅被子類調用,並且必須是子類中的第一個語句。
接口不能包含構造器,因為它們不能被實例化。
五、變量
抽象類中的變量可以是使用關鍵字final和static定義的變量,或者是普通實例變量。
接口中的變量必須是公共(public)、靜態(static)和常量(final),並且必須在聲明時進行初始化。
六、訪問修飾符
抽象類的方法可以是包(default)、抽象(abstract)、受保護(protected)和公共(public)的,並且也可以包含靜態(static)和最終(final)方法。
接口的方法必須是公共(public),並且不能包含任何實現。
七、代碼示例
//抽象類 public abstract class Animal{ protected String name; public Animal(String name){ this.name = name; } public abstract void eat(); public void move(){ System.out.println(name + " is moving"); } } //子類 public class Dog extends Animal{ public Dog(String name){ super(name); } public void eat(){ System.out.println(name + " is eating"); } } //接口 public interface Animal{ public static final String NAME = "Animal"; public abstract void eat(); public void move(); } //實現類 public class Dog implements Animal{ private String name; public Dog(String name){ this.name = name; } public void eat(){ System.out.println(name + " is eating"); } public void move(){ System.out.println(name + " is moving"); } }
原創文章,作者:XZNJ,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/141082.html