Java:抽象類abstract和接口Interface


一、抽象類:abstract

抽象類就是為了繼承而存在的,如果你定義了一個抽象類,卻不去繼承它,那么等於白白創建了這個抽象類,因為你不能用它來做任何事情。對於一個父類,如果它的某個方法在父類中實現出來沒有任何意義,必須根據子類的實際需求來進行不同的實現,那么就可以將這個方法聲明為abstract方法,此時這個類也就成為abstract類了。

格式如下:

  包含抽象方法的類稱為抽象類,但並不意味着抽象類中只能有抽象方法,它和普通類一樣,同樣可以擁有成員變量和普通的成員方法。注意,抽象類和普通類的主要有三點區別:

  1)抽象方法必須為public或者protected(因為如果為private,則不能被子類繼承,子類便無法實現該方法),缺省情況下默認為public。

  2)抽象類不能用來創建對象,但是它可以有構造方法,用來幫助子類實例化。

  3)如果一個類繼承於一個抽象類,則子類必須實現父類的抽象方法。如果子類沒有實現父類的抽象方法,則必須將子類也定義為為abstract類。

 抽象類的具體實例如下:

//定義一個抽象類,切記它不能用來創建對象
abstract class Employee
{
        //聲明受保護的屬性
    protected String name;
    protected String id;
    protected double pay;

        //抽象類的構造方法
    public Employee(String name,String id,double pay)
    {
          this.name = name;
          this.id = id;
          this.pay = pay;
    }
        //抽象類的普通成員方法
    public void print()
    {
     System.out.println("name = "+name+"id = "+id+"pay = "+pay);
    }
       
        //抽象類的抽象方法,子類必須實現該方法,不然子類也是抽象類
    public abstract void work();
}

//抽象類的一個子類 class Pro extends Employee { public Pro(String name,String id,double pay) { //調用父類的構造函數進行初始化
super(name,id,pay); }
//實現了父類中的抽象方法,所以子類不再是抽象類 public void work() { System.out.println("Pro work"); } } //抽象類的另一個子類 class Manager extends Employee { private double bonus; public Manager(String name,String id,double pay,double bonus) {
//調用父類的構造方法進行初始化 super(name,id,pay);
this.bonus = bonus; } //實現了父類中的方法,所以子類不再是抽象類 public void work() { System.out.println("Manager work"); } } //測試類 class YuanGongDemo { public static void main(String[] args) { Pro p1 = new Pro("Liding","jfisd",578.5); p1.work(); Manager p2 = new Manager("LiNing","技術部",4578.5,786.75); p2.work(); } }

 

二、接口:Interface

Java接口是一系列方法的聲明,是一些方法特征的集合,一個接口只有方法的特征沒有方法的實現,因此這些方法可以在不同的地方被不同的類實現,而這些實現可以具有不同的行為(功能)。

接口的主要特點:

1、接口中的成員變量默認都是public、static、final類型的,必須被顯示初始化。

2、接口中的方法默認都是public、abstract類型的。

3、接口中只能包含public、static、final類型的成員變量和public、abstract類型的成員方法。

4、接口沒有構造方法,不能被實例化。

5、一個接口不能實現另一個接口,但它可以繼承多個其他接口。

6、接口必須通過類來實現它的抽象方法。

7、與子類繼承抽象父類相似,當類實現了某個接口時,它必須實現接口中所有的抽象方法,否則這個類必須被定義為抽象類。

8、一個類只能繼承一個直接的父類,但能實現多個接口。

接口聲明和實現方式如下:

 具體舉例如下:

多態的功能擴展
基於電腦的實例(電腦主板)
擴展(網卡、聲卡、、、)

interface PCI             //擴展功能的接口(規則)
{
    public abstract void open();
    public abstract void close();
}

class MainBoard 
{
    public void run()
    {
        System.out.println("Mi anBoard run");
    }
    public void usePCI(PCI p)  //PCI p = new NetCard() //接口型的引用指向自己的子類對象
    {
        p.open();
        p.close();
    }    
    
}

class NetCard implements PCI     // 實現網卡的連接
{
    public void open()
    {    
      System.out.println("NetCard open");
    }
    public void close()
    {
       System.out.println("NetCard close");
    }
}

class SoundCard  implements PCI    // 實現聲卡的連接
{
    public void open()
    {    
      System.out.println("soundcard open");
    }
    public void close()
    {
       System.out.println("soundcard close");
    }
}


class DuoTaiDemo1   //測試類
{
    public static void main(String[] args)
    {
        MainBoard mb = new MainBoard();
        mb.run();
        mb.usePCI(new NetCard());
        mb.usePCI(new SoundCard());
    }
}
總結:抽象類和接口的區別

       1)抽象類可以提供成員方法的實現細節,而接口中只能存在public abstract 方法;

   2)抽象類中的成員變量可以是各種類型的,而接口中的成員變量只能是public static final類型的;

   3)接口中不能含有靜態代碼塊以及靜態方法,而抽象類可以有靜態代碼塊和靜態方法;

   4)一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。

       5)抽象類中的方法子類必須全部實現,不然子類也是抽象類,而接口中的抽象方法子類必須全部實現,是可選擇實現的。

       6)抽象類是一種模板設計模式,而接口是一種行為規范。

 



 


免責聲明!

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



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