程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> java抽象類和接口

java抽象類和接口

編輯:JAVA編程入門知識

類——客觀世界,是由許多事物構成的,這些事物既可以是有形的(比如一輛汽車),也可以是無形的(比如一次會議)。把客觀世界中的事物映射到面向對象的程序設計中就是對象。將同一類別的對象歸納總結,就構成類。包括屬性和方法、構造屬性:記錄事物的特征(狀態)方法:記錄了事物的行為;

  例如:學生

             特征:學號、性別、姓名、年齡

             行為:學習、吃飯

public class Student { 

      int id; 

      String name; 

  int age=20; 

  String sex; 

      public void study(String st){ 

     System.out.println(name+"學習了"+st); 

  public String eat(){ 

    return "ok"; 

  public Student(){} 

     public Student(int id,String name,int age,String sex){ 

      this.id=id; 

       This.name=name; 

       This.age=age; 

        this.sex=sex; 

 } 

抽象方法:僅有定義,沒有具體實現的方法體

抽象類:含有抽象方法的類,

抽象類有構造,但是無法調用構造,

抽象類中沒有對象,抽象方法不能執行,

抽象類的引用,指向非抽象的子類對象(多態),

抽象方法的調用其實是調用重寫以後的非抽象方法,

含有抽象方法的類一定是抽象類,當時抽象類中不一定有抽象方法。

抽象類不能被實例化,也就是說,不能有自己的對象

例如:

一個銀行系統中的賬戶,包括定期賬戶和活期賬戶,定期賬戶和活期賬戶都是基本的賬戶,

但是它們計算利息的方法不同,需要不同的實現方法,可以將基本賬戶定義為抽象類

 

public abstract class Acount { 

//基本賬戶

  private double total=2000; 

  public Acount(){} 

//抽象方法具有強制性、規范性

   public abstract double get(); 

 //抽象方法

   public void setTotal(double total) { 

     this.total = total; 

  } 

  public double getTotal() { 

    return total; 

  } 

 public class HAcount extends Acount { 

 //活期賬戶

  public double get() { 

    return this.getTotal()*0.02; 

  } 

  public static void main(String[] args){ 

     Acount a=new HAcount(); 

    System.out.println(a.get()); 

   } 

public class StaticAcount extends Acount{ 

//定期賬戶

  public double get(){ 

    return this.getTotal()*0.03; 

   } 

   public static void main(String[] args){ 

    Acount a=new StaticAcount(); 

  //抽象類的引用指向非抽象子類對象

     System.out.println(a.get()); 

   //抽象方法的調用其實是調用子類重寫以後的非抽象方法

  } 

}

聲明接口使用關鍵字“interface”

 接口中一般只包含一組

public抽象方法(且必須是公有抽象方法,但方法定義中public abstract可省略),因此可以將接口看成特殊的抽象類,接口也可以包含public static final數據(一般不寫)

Java一個類只能直接繼承(extends)另一個類,不允許一個子類繼承多個超類,卻允許一個子類繼承一個超類並實現(implements)多個接口

強制類型轉換成接口時,不檢測繼承關系,但是如果類型不匹配,會在運行時引發類型轉異常。

 例如:

 黃金:

 黃金是一種貨幣

 黃金也是一種金屬

 public interface Jinshu { //定義黃金是金屬的接口

   /* private */int i=8; //public static final 常量

   void shine(); 

public interface Huobi { 

 //定義黃金是貨幣的接口

  void change(); 

 public class Gold implements Huobi,Jinshu{ 

  public void shine(){ 

    System.out.println("黃金閃閃發光!"); 

  } 

  public void change(){ 

     System.out.println("黃金可以交換!"); 

  } 

  public static void main(String[] args){ 

     Jinshu js=new Gold(); 

     js.shine(); 

     Huobi hb=new Gold(); 

     hb.change(); 

     System.out.println(js.i); 

  } 

 類、抽象類、接口之間的聯系,可以舉例如下:

 一個公司,有老板,老板聘的經理,還有員工,

 類就是員工,抽象類就是經理,接口就是老板。

 接口裡就是給個方法,

但是他自己不做,

比如老板說我要那個文件,

給我定個機票,

我要那個策劃方案等,都是下面人做。老板只說不做。

 

抽象類給的方法,

有的他自己做,

有的其他人做。

比如經理說我要那個文檔,

員工就要發給他,但是他自己也要做點事,比如拿方案給老板看。經理又說又做。

一般類給的方法,就是什麼都要做,都要實現。

 抽象類和接口之間的區別和聯系:

兩者都是抽象類,都不能實例化

 Interface實現類和abstract的子類都必須實現已經聲明的抽象方法區別:

 一個類只能繼承一個抽象類,但是一個類可以實現多個接口

Interface強調的是功能的實現,而abstract class強調的是所屬關系

Interface中的方法都是抽象方法,沒有方法體,它的實現類中必須包含實現接口的實現方法,而abstract class的子類中可以有選擇的實現抽象方法

Interface是完全抽象的,接口中只能聲明方法,且必須是用public abstract,不能是private及protected,interface沒有方法體,而abstract class 中可以有非抽象方法,

接口中定義的變量是public static final類型,且必須有初值,實現類中不能重新定義或改變,而抽象類中的變量可以重新定義,可以重新賦值。

舉例:

門的動作可以定義開和關兩個動作,同時門還可以實現報警的功能

abstract class Door{ 

  abstract void open(); 

  abstract void close();

  interface Alarm{ 

   void alarm(); 

  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved