Java接口和抽象類的理解

接口和抽象類的相同之處就是 都會有抽象方法編程

抽象方法就是一個沒有方法體 等待繼承的子類完成的方法ide

然而接口比較嚴格 它的方法必須是抽象方法且是公開的 學習

抽象類 能夠有本身的屬性 和 實體方法spa

 1 package com.jay;
 2 
 3 
 4 public abstract class Dog {
 5     String kind = "dog";
 6 
 7     void playGame() {
 8         System.out.println("The dog is playing game");
 9     }
10 
11     abstract void makeMoney();
12 }

有一個抽象類Dog,能夠把abstract理解成這是一個混子類,也就是這個Dog可能會有一些事本身不想作想讓別人去作code

這個Dog有本身得種類kind,指示本身只一條🐶對象

有一個本身方法playGame(),若是是本身特有的不讓兒子繼承的化,能夠加修飾符private。//很少解釋了blog

而後這個Dog這輩子沒有賺多少錢,但願兒子多賺點錢,將本身的遺願讓兒子繼承,因而有了抽象方法 makeMoney()繼承

兒子感動了因而打算完成父親的遺願賺錢因而乎接口

package com.jay;


public class Son extends Dog{
    
    @Override
    void makeMoney() {
        System.out.println("The son of dog made more money");
    }
}

這個兒子實現父親的遺願。數學

這是好的一方面,結果這個兒子也是不學無術,不想賺錢。因而乎

package com.jay;


public abstract class Son extends Dog{
    
}

本身也成爲了一個混子,把這件沒有完成的事留給下個繼承人。

能夠看得出來抽象類它也是一個類。

首相用面向對象的思想來理解,類其實就是將生活中客觀存在的對象,將對象的屬性和特性封裝起來

而接口與類不一樣,它不能夠被實例化(這裏指單獨將接口實例化),由於它不能夠看成一個對象

接口能夠被理解爲一種技能,功能。好比一扇門門能夠有防盜及這個技能也能夠同時擁有報警的功能

也就是說 一個類能夠實現多個接口

這裏有一個學習的接口,定義了學習數學和學習計算機的方法,

package com.jay;


public interface Learn {
    void learnMath();

    void learnComputer();
}

而後這是一個烹飪的方法

package com.jay;


public interface Cooking {

    void cookingFish();

    void cookingBone();
}

而後這狗很勤勞都繼承這些技能,而且實現

 1 package com.jay;
 2 
 3 
 4 public class Son extends Dog implements Learn, Cooking {
 5 
 6     @Override
 7     void makeMoney() {
 8         System.out.println("The son of dog made more money");
 9     }
10 
11     @Override
12     public void cookingFish() {
13         System.out.println("cookingFish");
14     }
15 
16     @Override
17     public void cookingBone() {
18         System.out.println("cookingBone");
19     }
20 
21     @Override
22     public void learnMath() {
23         System.out.println("learnMath");
24     }
25 
26     @Override
27     public void learnComputer() {
28         System.out.println("learnComputer");
29     }
30 }

固然若是是什麼都不去實現,也能夠在class上加abstract修飾符告訴他人這裏有未完成的方法

package com.jay;


public abstract class Son extends Dog implements Learn, Cooking {


}

固然你也是能夠加abstract修飾之後有選擇性的選擇幾個抽象方法去實現

然而每一個子類只能有一個父類

Java 是隻能單繼承的一門編程語語言 

能夠這樣說,一個 木頭(object)  被製做(繼承) 成 一扇門 那麼這個物體就只能成爲門,它

就不能夠成爲汽車或者是電腦

抽象類和通常的類的區別就是 在抽象類中有抽象方法

抽象方法必須在抽象類中 當子類繼承一個抽象類的時候 子類必須完成父類的抽象方法

或者子類也成爲抽象方法

抽象類就是表示在這個類中有抽象方法(聲明一個沒有抽象方法的抽象類是沒有意義的)等待子類去實現抽象方法

相關文章
相關標籤/搜索