abstract class和interface在Java語(yǔ)言中都是用來(lái)進(jìn)行抽象類定義的
Interface ,給外界的接口,按照規(guī)定辦事;
Abstract??,內(nèi)部繼承關(guān)系;
interface 就是一組操作的集合,它定義了一個(gè)行為集但不作任何具體的實(shí)現(xiàn),這樣的話,具體的操作 都可以放在實(shí)現(xiàn)類中去,
??????????體現(xiàn)設(shè)計(jì)與實(shí)現(xiàn)分離的設(shè)計(jì)思想。
在面向?qū)ο蟮母拍钪校械膶?duì)象都是通過(guò)類來(lái)描繪,如果一個(gè)類中沒(méi)有包含足夠的信息來(lái)描繪一個(gè)具體的對(duì)象,這樣的類就是抽象類
抽象概念在問(wèn)題領(lǐng)域沒(méi)有對(duì)應(yīng)的具體概念,所以用以表征抽象概念的抽象類是不能夠?qū)嵗摹?br />
=====================================================================================================================
使用abstract class的方式定義Demo抽象類的方式如下:
abstract class Demo {
abstract void method1();
abstract void method2();
…
}
使用interface的方式定義Demo抽象類的方式如下:
interface Demo {
void method1();
void method2();
…
}
====================================================================================================================
從編程層面看abstract class和interface
abstract class在Java語(yǔ)言中表示的是一種繼承關(guān)系,一個(gè)類只能使用一次繼承關(guān)系
一個(gè)類卻可以實(shí)現(xiàn)多個(gè)interface
在abstract class的定義中,我們可以賦予方法的默認(rèn)行為
在interface的定義中,方法卻不能擁有默認(rèn)行為
======================================================================================================================
例如要設(shè)計(jì)一個(gè)形狀類MShape,從此類可以派生 方形、圓形、三角形等子類。我們就可以將MShape這個(gè)父類設(shè)計(jì)為abstract類。
比如,子類都有 color 屬性,因此可以把 color 這個(gè)數(shù)據(jù)成員,以及給 color 賦值的method均設(shè)計(jì)在父類中,
這樣就不用在每個(gè)子類中設(shè)計(jì)相同的代碼來(lái)處理 color 這個(gè)屬性。
而如果想計(jì)算幾何形狀的面積,由于各個(gè)幾何形狀的面積計(jì)算方式都不相同,所以把計(jì)算面積的method的處理放在父類中就不合適,
但由于每個(gè)幾何形狀都需要用到這個(gè)method,因此可以在父類中只聲明計(jì)算面積的method "area()",而把具體的處理放在子類中定義。
即把a(bǔ)rea()設(shè)計(jì)為抽象類。
以下是程序代碼:
//abstract類 MShape??????
abstract class MShape
{
????????protected String color;?? //數(shù)據(jù)成員
????????public void setColor(String mcolor)?? //一般方法,定義了具體的處理
????????{
?????????? color=mcolor;
????????}
????????abstract void area();?? //抽象方法,沒(méi)有定義具體的處理
}
//方形類
class RectShape extends MShape
{??????
????????int width,height,rectarea;????
????????public RectShape(int w,int h)
????????{??
???????????????? width=w;
???????????????? height=h;????????
????????}
????????public void area()??//計(jì)算面積
????????{??????????
??????????rectarea=width*height;
????????}
}
//使用
public class myapp
{
????????public static void main(String args[])
????????{
??????????RectShape rect=new RectShape(3,6);
??????????rect.setColor("Red");
??????????rect.area();
??????????System.out.print("color="+rect.color+", area="+rect.rectarea);
????????}
}
由此可見,在abstract中不僅可以定義一般的方法(即可以進(jìn)行具體處理的方法),還可以象interface一樣定義抽象方法。
而在interface中只能定義抽象方法。