一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中抽象類、抽象方法、接口與實現接口實例詳解

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

2021-01-30 12:21YJLAugus Java教程

這篇文章主要給大家介紹了關于java中抽象類、抽象方法、接口與實現接口的相關資料,文中通過示例代碼將四者介紹的非常詳細,并且簡單介紹了抽象類和接口的區別,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。

前言

對于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來完成+-*/運算

?
1
2
3
4
5
6
7
8
//父類.并且使用用接口
package cn.yjlblog.wwww;
 
public interface Compute {
 int computer(int n,int m);//抽象方法,勝率abstract ,public
 
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//子類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;
 }
 
 
}
?
1
2
3
4
5
6
7
8
9
10
11
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;
 }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
子類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;
 }
 
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
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;
 }
 
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
//應用類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);
 
 }
 
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//測試類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函數。這樣寫的好處是,每個打印機都有自己打印方式,此舉可以防止子類沒有寫明打印方式。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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("佳能打印機開始打印");
};
}

抽象類和接口區別

(一)語法層次

?
1
2
3
4
5
6
7
8
9
public abstract class People { //關鍵詞abstract,聲明該類為抽象類
 void Num();      
 abstract void Name();    //聲明該方法為抽象方法
}
 
Interface Person {
  void Num();
  void Name();
} 

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

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

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

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

(二)設計層次

1、 抽象層次不同

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

2、 跨域不同

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

3、 設計層次不同

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

總結

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

原文鏈接:http://www.yjlblog.cn/blog/?p=126

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品亚洲午夜久久久久 | 羞羞漫画免费漫画页面在线看漫画秋蝉 | 女教师的一级毛片 | 精品无码一区在线观看 | 日本天堂视频 | 久久婷婷五月综合色丁香花 | 九九精品视频在线免费观看 | 果冻传媒在线免费观看 | 欧美贵妇videos办公室360 | 免费人成在线观看69式小视频 | 网站视频免费 | 免费一区在线观看 | 99re热这里只有精品视频 | 国产成人精品一区二区阿娇陈冠希 | 精品国产成a人在线观看 | 2022最新国产在线不卡a | 女人肮脏的交易中文字幕未删减版 | 青草视频免费 | 白丝爆动漫羞羞动漫网站 | 狠狠干综合网 | 国产成人高清亚洲一区91 | 福利视频一区二区三区 | 苍井空av | 四虎永久在线精品国产馆v视影院 | 亚洲精品久久久打桩机 | 国产在线看片护士免费视频 | 亚洲国产综合自在线另类 | 美女鸡 | 欧美色在线 | 国产成人精品高清在线观看99 | 国产免费小视频在线观看 | 9自拍视频在线观看 | 亚洲天堂网站 | 99久久香蕉国产线看观香 | 国产成人精品一区 | 嫩草香味 | 青青草成人在线观看 | 青青草国产精品免费 | 性色视频免费 | 午夜亚洲国产 | 成人私人影院在线版 |