抽象類與接口的區別是什么?想必大家對這個問題都不陌生,也是讓很多人頭疼的問題之一!因為我們面試之前都會鞏固復習這個問題,但是時隔不久又會忘記,主要的原因是沒有了解抽象類和接口的實質及作用。
抽象類:
抽象類的產生:在java面向對象設計編程中,抽象類產生於類的繼承;如Student類和Teacher類都可以繼承Person類,而現實生活中有具體的學生(Student)、教師(Teacher),而沒有一種叫人類(Person)的人,所以Person類就屬於抽象中的概念,
進而Person類不具有實例化的意義,通常就會把Person類定義為抽象類來限制其實例化。
抽象類和抽象方法的定義:
1 /** 2 * 父類Person 3 * @author bianxc 4 */ 5 public abstract class Person { 6 7 protected String name = ""; 8 protected int age = 0; 9 10 public Person(String name, int age) { 11 this.name = name; 12 this.age = age; 13 } 14 15 /** 16 * 抽象方法,展示個人信息 17 */ 18 public abstract void showInfo(); 19 20 /** 21 * 抽象類中可以有抽象方法,也可以有方法實現 22 */ 23 public void otherMethod() { 24 System.out.println("我是方法實現"); 25 } 26 } 27 28 /** 29 * 子類Student 30 * @author bianxc 31 */ 32 public class Student extends Person { 33 34 private String grade = ""; 35 36 public Student(String name, int age, String grade) { 37 super(name, age); 38 this.grade = grade; 39 } 40 41 @Override 42 public void showInfo() { 43 System.out.println("姓名:" + super.name + ",年齡:" + "," 44 + "年齡:" + super.age + ",年級:" + this.grade); 45 } 46 }
注意:抽象類中可以有零到多個抽象方法。當父類中定義了抽象方法,則子類(非抽象類)必須重寫該抽象方法,否則子類必須定義為抽象類。
總結:
1.抽象類不能被實例化
2.抽象類中可以有零到多個抽象方法,也可以有普通方法
3.如果一個類中包含抽象方法,那么類必須定義為抽象類
4.抽象類中可以有構造方法
接口:
接口的產生:java面向對象中,類的繼承屬於 is a 關系,只支持單繼承;如果學生又具有一種特殊行為考試,就不能讓Student類繼承Person類又繼承exam類。
接口的定義:
1 /** 2 * 考試接口 3 * @author bianxc 4 */ 5 public interface Exam { 6 7 void test(); 8 } 9 10 /** 11 * 子類Student 12 * @author bianxc 13 */ 14 public class Student extends Person implements Exam { 15 16 private String grade = ""; 17 18 public Student(String name, int age, String grade) { 19 super(name, age); 20 this.grade = grade; 21 } 22 23 @Override 24 public void showInfo() { 25 System.out.println("姓名:" + super.name + ",年齡:" + "," 26 + "年齡:" + super.age + ",年級:" + this.grade); 27 } 28 29 @Override 30 public void test() { 31 System.out.println("學生正在考試"); 32 } 33 }
總結:
1.接口可以理解為一個特殊的抽象類(不能被實例化),但又和抽象類以完全不同的語法定義
2.接口中只能定義常量,不能定義變量;接口中的屬性默認用 public static final 修飾,接口中的屬性都是全局靜態常量(由於靜態常量不能重新被賦值,因此接口中不允許存在構造方法)
3.接口中的方法全部都是抽象方法,因此類實現接口必須重寫接口中的所有方法,否則必須定義為抽象類
4.接口可以實現多繼承,但是接口不能繼承類;一個類只能繼承一個父父類
5.接口產生就是為了達到多重繼承的效果
