abstract 類和 abstract 方法 (抽象類與抽象方法)


抽象一直以來都是人們所神往的藝術形式,這點從梵高,畢加索等藝術家的身上就可以看出。抽象所代表的是一種形式上的美感,頗有一種虛無縹緲只可意會不可言傳的意味。但是JAVA中的抽象類與抽象方法相對而言就更加直接了,它給我的感覺更像是文章的副標題,本身不發揮什么作用,但是卻可以從中展開許多功能。

  用關鍵字abstract修飾的類稱為abstract類(抽象類),比如:

abstract classA{

}

用關鍵字abstract修飾的方法稱為abstract方法(抽象方法),例如:

abstract int min (int x,int y);

  對於abstract方法只允許聲明,不允許實現(因為沒有方法體)(畢竟叫抽象,當然不能實實在在的讓你實現),並且不允許使用final和abstract同時修飾一個方法或者類,也不允許使用static修飾abstract方法。也就是說,abstract方法只能是實例方法,不能是類方法。

 

 

      既然abstract類和方法這么特殊,我們就必須對比一下它和普通類與方法之間的區別了:

1.abstract類中可以有abstract方法

 abstract類中可以有abstract方法,也可以有非abstract方法

 非abstract類中不可以有abstract方法

2.abstract類不能使用new運算符創建對象

但是如果一個非抽象類是抽象類的子類,這時候我們想要創建該對象呢,這時候它就必須要重寫父類的抽象方法,並且給出方法體,這也就是說明了為什么不允許使用final和abstract同時修飾一個類或者方法的原因。

重點常考!:final和abstract,private和abstract,static和abstract,這些是不能放在一起的修飾符,因為abstract修飾的方法是必須在其子類中實現(覆蓋),才能以多態方式調用,以上修飾符在修飾方法時期子類都覆蓋不了這個方法,final是不可以覆蓋,private是不能夠繼承到子類,所以也就不能覆蓋,static是可以覆蓋的,但是在調用時會調用編譯時類型的方法,因為調用的是父類的方法,而父類的方法又是抽象的方法,又不能夠調用,所以上的修飾符不能放在一起。

3.abstract類的子類

如果一個非abstract類是abstract類的子類,它必須重寫父類的abstract方法,也就是去掉abstract方法的abstract修飾,並給出方法體。

如果一個abstract類是abstract類的子類,它可以重寫父類的abstract方法,也可以繼承父類的abstract方法。

下面舉個例子:

abstract class GirlFriend{                                //抽象類,封裝了兩個行為標准

abstract void speak();

abstract void cooking();

}

class ChinaGirlFriend extends GirlFriend{

void speak(){

System.out.println("你好");

}

void cooking(){

System.out.println("水煮魚");

}

}

class AmercanGirlFriend extends GirlFriend{

void speak(){

System.out.println("hello");

}

void cooking(){

System.out.println("roast beef");

}

}

class boy{

GirlFriend friend;

void setGirlFriend(GirlFriend f){

friend=f;

}

void showGirlFriend(){

friend.speaking();

friend.cooking();

}

}

 

public class text{

public static void main(String args[]){

GirlFriend girl =new ChineseGirlFriend();      //這里girl是上轉型對象

Boy boy=new boy();

boy.setGirlFriend(girl);

boy.showGirlFriend();

girl=new AmericanGirlFriend();             //girl 是上轉型對象

boy.setGirlFriend(girl);

boy.showGirlFriend();

}

}
————————————————
版權聲明:本文為CSDN博主「踏一回月」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_40302611/article/details/80426381


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM