抽象類和接口的區別

這個也是不少筆試或者面試中常常出現的一個問題面試

首先咱們要理解抽象類是什麼ide

在面向對象領域中,萬物皆對象,同時全部的對象都是經過類來描述。可是並非全部的類都是來描述對象的spa

好比說new Animal(),這是產生了一個新的類,可是animal是什麼,咱們不知道,他沒有具體的動物的概念,因此他是一個抽象類。須要cat、dog這種具體的動物來進行描述code

  抽象類須要其餘具體的類來支撐。對象

  在面向對象領域中,因爲抽象的概念在問題領域沒有對應的具體概念,因此表現抽象概念的抽象類不能被實例化。blog

  抽象類體現類數據抽象,是實現多態的機制,這組抽象方法的具體由它的派生類來實現。抽象類的存在就是爲了繼承繼承

  抽象類的注意點:接口

   一、抽象類不能被實例化,實例化的工做應該交由它的子類來完成,它只須要有一個引用便可。編譯

         二、抽象方法必須由子類來進行重寫。class

         三、只要包含一個抽象方法的抽象類,該方法必需要定義成抽象類,無論是否還包含有其餘方法。

         四、抽象類中能夠包含具體的方法,固然也能夠不包含抽象方法。

         五、子類中的抽象方法不能與父類的抽象方法同名。

         六、abstract不能與final並列修飾同一個類。

實例:

 1 public abstract class Animal {  
 2     public abstract void eat();  
 3 }  
 4   
 5 public class Cat extends Animal{  
 6   
 7     @Override  
 8     public void eat() {  
 9         System.out.println("貓吃魚...");  
10     }  
11 }  
12   
13 public class Dog extends Animal{  
14   
15     @Override  
16     public void eat() {  
17         System.out.println("狗吃骨頭...");  
18     }  
19   
20 }  
21   
22 public class Test {  
23   
24     public static void main(String[] args) {  
25         Animal a1 = new Cat();  
26         Animal a2 = new Dog();  
27           
28         a1.eat();  
29         a2.eat();  
30     }  
31 }  
32   
33 --------------------------------------------------------------------  
34 Output:  
35 貓吃魚...
36 狗吃骨頭...
   Animal a1 = new Cat(); Animal a2 = new Dog(); 
向上轉型
接口
接口自己不是類,因此不能被實例化,咱們只能new它的實現類

實現該接口的實現類必需要實現接口的全部方法。

implement實現接口,接口實際上相似抽象類的一種延續,Java中的單繼承,可是接口能夠多實現

 在使用接口過程當中須要注意以下幾個問題:

         一、Interface的全部方法訪問權限自動被聲明爲public。確切的說只能爲public,固然你能夠顯示的聲明爲protected、private,可是編譯會出錯!

         二、接口中能夠定義「成員變量」,或者說是不可變的常量,由於接口中的「成員變量」會自動變爲爲public static final。能夠經過類命名直接訪問:ImplementClass.name。

         三、接口中不存在實現的方法。

         四、實現接口的非抽象類必需要實現該接口的全部方法。抽象類能夠不用實現。

         五、不能使用new操做符實例化一個接口,但能夠聲明一個接口變量,該變量必須引用(refer to)一個實現該接口的類的對象。可使用 instanceof 檢查一個對象是否實現了某個特定的接口。例如:if(anObject instanceof Comparable){}。

         六、在實現多接口的時候必定要避免方法名的重複。

相關文章
相關標籤/搜索