中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中抽象類、抽象方法、接口與實現接口實例詳解

發布時間:2020-10-02 23:47:50 來源:腳本之家 閱讀:295 作者:YJLAugus 欄目:編程語言

前言

對于java中的抽象類,抽象方法,接口,實現接口等具體的概念就不在這里詳細的說明了,網上書本都有很多解釋,主要是我懶,下面通過一個例子來說明其中的精髓要點,能不能練成絕世武功,踏上封王之路,就看自己的的啦(不要誤會,我指的只是我自己啦啦)

用接口實現一個簡單的計算器

1、利用接口做參數,寫個計算器,能完成+-*/運算

(1)定義一個接口Compute含有一個方法int computer(int n,int m);

(2)設計四個類分別實現此接口,完成+-*/運算

(3)設計一個類UseCompute,含有方法: public void useCom(Compute com, int one, int two)

       此方法要求能夠:

           * 1.用傳遞過來的對象調用computer方法完成運算

           * 2.輸出運算的結果

(4)設計一個測試類,調用UseCompute中的方法useCom來完成+-*/運算

//父類.并且使用用接口
package cn.yjlblog.wwww;

public interface Compute {
 int computer(int n,int m);//抽象方法,勝率abstract ,public


}
//子類add 實現加法運算
package cn.yjlblog.wwww;

public class add implements Compute{

 @Override //接口的實現類和抽象類的子類是一樣的,要想可以使用new 一個對象,就必須對“抽象類”里的方法
   //進行重寫
 public int computer(int n, int m) {
  // TODO Auto-generated method stub
  return n+m;
 }


}
package cn.yjlblog.wwww;
//子類subtract 實現減法運算
public class subtract implements Compute{

 @Override
 public int computer(int n, int m) {
  // TODO Auto-generated method stub
  return n-m;
 }

}
子類multiplied 實現乘法運算
package cn.yjlblog.wwww;

public class multiplied implements Compute{

 @Override
 public int computer(int n, int m) {
  // TODO Auto-generated method stub
  return n*m;
 }


}
package cn.yjlblog.wwww;
//子類divided 實現整除運算
public class divided implements Compute{

 @Override
 public int computer(int n, int m) {
  // TODO Auto-generated method stub
  return n/m;
 }


}
//應用類UseComepute 用來
package cn.yjlblog.wwww;

public class UseComepute {
 public void useCom(Compute com,int one,int two){
  int x = com.computer(one, two);
  System.out.println("運算結果為:"+x);

 }


}
//測試類Test
package cn.yjlblog.wwww;

public class Test {
 public static void main(String[] args) {
  UseComepute uc = new UseComepute();//應用類生成對象,使用useCome 方法
  int one = 10;
  int two = 20;
  Compute ad = new add();//接口的多態
  Compute sub = new subtract();
  Compute mul= new multiplied();
  Compute div = new divided();
  uc.useCom(ad, one, two);
  uc.useCom(sub, one, two);
  uc.useCom(mul, one, two);
  uc.useCom(div, one, two);

  //哈哈,類的名字忘記大寫了

 }

}

為什么需要用到抽象類?

在下面這個例子中,把打印機類封裝成抽象類,把print定義成抽象類,當HPPrinter和CannonPrinter要繼承printer類的時候,必須重寫print函數。這樣寫的好處是,每個打印機都有自己打印方式,此舉可以防止子類沒有寫明打印方式。

public abstract void Printer() {
public void open() {
system.out.print("打印機開啟");
}
public void close() {
system.out.print("打印機關閉");
}
abstract void print(); //把print方法定義為抽象方法
}

public HPPrinter extends Printer {
void print(){ //必須重寫抽象方法print() 
system.out.print("惠普打印機開始打印");
};
}

public CanonPrinter extends Printer {
void print(){ //必須重寫抽象方法print()
system.out.print("佳能打印機開始打印");
};
}

抽象類和接口區別

(一)語法層次

public abstract class People { //關鍵詞abstract,聲明該類為抽象類
 void Num();      
 abstract void Name();    //聲明該方法為抽象方法
}
 
Interface Person {
  void Num();
  void Name();
} 

抽象類方式中,抽象類可以擁有任意范圍的成員數據,同時也可以擁有自己的非抽象方法,

但是接口方式中,它僅能夠有靜態、不能修改的成員數據(但是我們一般是不會在接口中使用成員數據),同時它所有的方法都必須是抽象的。

在某種程度上來說,接口是抽象類的特殊化。

對子類而言,它只能繼承一個抽象類(這是java為了數據安全而考慮的),但是卻可以實現多個接口。

(二)設計層次

1、 抽象層次不同

抽象類是對類抽象,而接口是對行為的抽象。抽象類是對整個類整體進行抽象,包括屬性、行為,但是接口卻是對類局部(行為)進行抽象。

2、 跨域不同

抽象類所跨域的是具有相似特點的類,而接口卻可以跨域不同的類。我們知道抽象類是從子類中發現公共部分,然后泛化成抽象類,子類繼承該父類即可,但是接口不同。實現它的子類可以不存在任何關系,共同之處。例如貓、狗可以抽象成一個動物類抽象類,具備叫的方法。鳥、飛機可以實現飛Fly接口,具備飛的行為,這里我們總不能將鳥、飛機共用一個父類吧!所以說抽象類所體現的是一種繼承關系,要想使得繼承關系合理,父類和派生類之間必須存在"is-a" 關系,即父類和派生類在概念本質上應該是相同的。對于接口則不然,并不要求接口的實現者和接口定義在概念本質上是一致的, 僅僅是實現了接口定義的契約而已。

3、 設計層次不同

對于抽象類而言,它是自下而上來設計的,我們要先知道子類才能抽象出父類,而接口則不同,它根本就不需要知道子類的存在,只需要定義一個規則即可,至于什么子類、什么時候怎么實現它一概不知。比如我們只有一個貓類在這里,如果你這是就抽象成一個動物類,是不是設計有點兒過度?我們起碼要有兩個動物類,貓、狗在這里,我們在抽象他們的共同點形成動物抽象類吧!所以說抽象類往往都是通過重構而來的!但是接口就不同,比如說飛,我們根本就不知道會有什么東西來實現這個飛接口,怎么實現也不得而知,我們要做的就是事前定義好飛的行為接口。所以說抽象類是自底向上抽象而來的,接口是自頂向下設計出來的。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄平县| 铅山县| 南郑县| 宁化县| 嘉祥县| 噶尔县| 宝丰县| 新余市| 乐清市| 密山市| 临城县| 宾川县| 合山市| 会昌县| 论坛| 汕尾市| 通许县| 澜沧| 沂南县| 阿拉善右旗| 从江县| 张北县| 高安市| 大田县| 当阳市| 台江县| 奉节县| 西畴县| 嘉禾县| 肥城市| 衡水市| 车险| 镇原县| 孝感市| 舒城县| 牙克石市| 维西| 沅陵县| 长丰县| 手游| 祁阳县|