亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口實(shí)例詳解

 更新時(shí)間:2017年11月06日 08:44:06   作者:YJLAugus  
這篇文章主要給大家介紹了關(guān)于java中抽象類(lèi)、抽象方法、接口與實(shí)現(xiàn)接口的相關(guān)資料,文中通過(guò)示例代碼將四者介紹的非常詳細(xì),并且簡(jiǎn)單介紹了抽象類(lèi)和接口的區(qū)別,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。

前言

對(duì)于java中的抽象類(lèi),抽象方法,接口,實(shí)現(xiàn)接口等具體的概念就不在這里詳細(xì)的說(shuō)明了,網(wǎng)上書(shū)本都有很多解釋,主要是我懶,下面通過(guò)一個(gè)例子來(lái)說(shuō)明其中的精髓要點(diǎn),能不能練成絕世武功,踏上封王之路,就看自己的的啦(不要誤會(huì),我指的只是我自己啦啦)

用接口實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器

1、利用接口做參數(shù),寫(xiě)個(gè)計(jì)算器,能完成+-*/運(yùn)算

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

(2)設(shè)計(jì)四個(gè)類(lèi)分別實(shí)現(xiàn)此接口,完成+-*/運(yùn)算

(3)設(shè)計(jì)一個(gè)類(lèi)UseCompute,含有方法: public void useCom(Compute com, int one, int two)

       此方法要求能夠:

           * 1.用傳遞過(guò)來(lái)的對(duì)象調(diào)用computer方法完成運(yùn)算

           * 2.輸出運(yùn)算的結(jié)果

(4)設(shè)計(jì)一個(gè)測(cè)試類(lèi),調(diào)用UseCompute中的方法useCom來(lái)完成+-*/運(yùn)算

//父類(lèi).并且使用用接口
package cn.yjlblog.wwww;

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


}
//子類(lèi)add 實(shí)現(xiàn)加法運(yùn)算
package cn.yjlblog.wwww;

public class add implements Compute{

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


}
package cn.yjlblog.wwww;
//子類(lèi)subtract 實(shí)現(xiàn)減法運(yùn)算
public class subtract implements Compute{

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

}
子類(lèi)multiplied 實(shí)現(xiàn)乘法運(yùn)算
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;
//子類(lèi)divided 實(shí)現(xiàn)整除運(yùn)算
public class divided implements Compute{

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


}
//應(yīng)用類(lèi)UseComepute 用來(lái)
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("運(yùn)算結(jié)果為:"+x);

 }


}
//測(cè)試類(lèi)Test
package cn.yjlblog.wwww;

public class Test {
 public static void main(String[] args) {
  UseComepute uc = new UseComepute();//應(yīng)用類(lèi)生成對(duì)象,使用useCome 方法
  int one = 10;
  int two = 20;
  Compute ad = new add();//接口的多態(tài)
  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);

  //哈哈,類(lèi)的名字忘記大寫(xiě)了

 }

}

為什么需要用到抽象類(lèi)?

在下面這個(gè)例子中,把打印機(jī)類(lèi)封裝成抽象類(lèi),把print定義成抽象類(lèi),當(dāng)HPPrinter和CannonPrinter要繼承printer類(lèi)的時(shí)候,必須重寫(xiě)print函數(shù)。這樣寫(xiě)的好處是,每個(gè)打印機(jī)都有自己打印方式,此舉可以防止子類(lèi)沒(méi)有寫(xiě)明打印方式。

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

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

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

抽象類(lèi)和接口區(qū)別

(一)語(yǔ)法層次

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

抽象類(lèi)方式中,抽象類(lèi)可以擁有任意范圍的成員數(shù)據(jù),同時(shí)也可以擁有自己的非抽象方法,

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

在某種程度上來(lái)說(shuō),接口是抽象類(lèi)的特殊化。

對(duì)子類(lèi)而言,它只能繼承一個(gè)抽象類(lèi)(這是java為了數(shù)據(jù)安全而考慮的),但是卻可以實(shí)現(xiàn)多個(gè)接口。

(二)設(shè)計(jì)層次

1、 抽象層次不同

抽象類(lèi)是對(duì)類(lèi)抽象,而接口是對(duì)行為的抽象。抽象類(lèi)是對(duì)整個(gè)類(lèi)整體進(jìn)行抽象,包括屬性、行為,但是接口卻是對(duì)類(lèi)局部(行為)進(jìn)行抽象。

2、 跨域不同

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

3、 設(shè)計(jì)層次不同

對(duì)于抽象類(lèi)而言,它是自下而上來(lái)設(shè)計(jì)的,我們要先知道子類(lèi)才能抽象出父類(lèi),而接口則不同,它根本就不需要知道子類(lèi)的存在,只需要定義一個(gè)規(guī)則即可,至于什么子類(lèi)、什么時(shí)候怎么實(shí)現(xiàn)它一概不知。比如我們只有一個(gè)貓類(lèi)在這里,如果你這是就抽象成一個(gè)動(dòng)物類(lèi),是不是設(shè)計(jì)有點(diǎn)兒過(guò)度?我們起碼要有兩個(gè)動(dòng)物類(lèi),貓、狗在這里,我們?cè)诔橄笏麄兊墓餐c(diǎn)形成動(dòng)物抽象類(lèi)吧!所以說(shuō)抽象類(lèi)往往都是通過(guò)重構(gòu)而來(lái)的!但是接口就不同,比如說(shuō)飛,我們根本就不知道會(huì)有什么東西來(lái)實(shí)現(xiàn)這個(gè)飛接口,怎么實(shí)現(xiàn)也不得而知,我們要做的就是事前定義好飛的行為接口。所以說(shuō)抽象類(lèi)是自底向上抽象而來(lái)的,接口是自頂向下設(shè)計(jì)出來(lái)的。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • java中Integer包裝類(lèi)裝箱的一個(gè)細(xì)節(jié)詳解

    java中Integer包裝類(lèi)裝箱的一個(gè)細(xì)節(jié)詳解

    Java中的Integer是int的包裝類(lèi)型,下面這篇文章主要給大家介紹了關(guān)于java中Integer包裝類(lèi)裝箱的一個(gè)細(xì)節(jié)的相關(guān)資料,文中介紹的這個(gè)細(xì)節(jié)挺重要的,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起看看吧
    2018-07-07
  • Java實(shí)現(xiàn)的圖片上傳工具類(lèi)完整實(shí)例

    Java實(shí)現(xiàn)的圖片上傳工具類(lèi)完整實(shí)例

    這篇文章主要介紹了Java實(shí)現(xiàn)的圖片上傳工具類(lèi),涉及java針對(duì)圖片文件的檢查、上傳、清除等相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • Mybatis-Plus根據(jù)時(shí)間段去查詢數(shù)據(jù)的實(shí)現(xiàn)示例

    Mybatis-Plus根據(jù)時(shí)間段去查詢數(shù)據(jù)的實(shí)現(xiàn)示例

    這篇文章主要介紹了Mybatis-Plus根據(jù)時(shí)間段去查詢數(shù)據(jù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中泛型的示例詳解

    Java中泛型的示例詳解

    泛型機(jī)制在項(xiàng)目中一直都在使用,不僅如此,很多源碼中都用到了泛型機(jī)制。本文將通過(guò)一些示例帶大家深入了解一下Java的泛型機(jī)制,需要的可以了解一下
    2022-10-10
  • java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    java使用Jsoup連接網(wǎng)站超時(shí)的解決方法

    jsoup是一個(gè)非常好的解析網(wǎng)頁(yè)的包,用java開(kāi)發(fā)的,提供了類(lèi)似DOM,CSS選擇器的方式來(lái)查找和提取文檔中的內(nèi)容,提取文檔內(nèi)容時(shí)會(huì)出現(xiàn)超時(shí)的情況,解決方法可看下文
    2013-11-11
  • SpringBoot常用讀取配置文件的3種方法小結(jié)

    SpringBoot常用讀取配置文件的3種方法小結(jié)

    本文主要介紹了SpringBoot常用讀取配置文件的3種方法小結(jié),主要包括@Value讀取配置文件,@ConfigurationProperties 讀取配置文件和讀取配置文件中的List,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • java防反編譯最簡(jiǎn)單的技巧分享

    java防反編譯最簡(jiǎn)單的技巧分享

    這篇文章主要給大家分享了關(guān)于java防反編譯最簡(jiǎn)單的技巧,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Java接口測(cè)試Cookie與token原理解析

    Java接口測(cè)試Cookie與token原理解析

    這篇文章主要介紹了Java接口測(cè)試Cookie與token原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java并發(fā)計(jì)數(shù)器的深入理解

    Java并發(fā)計(jì)數(shù)器的深入理解

    這篇文章主要給大家介紹了關(guān)于Java并發(fā)計(jì)數(shù)器的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • Java 10 局部變量類(lèi)型推斷淺析

    Java 10 局部變量類(lèi)型推斷淺析

    這篇文章主要介紹了Java 10 局部變量類(lèi)型推斷淺析,Java 10 引進(jìn)一種新的閃閃發(fā)光的特性叫做局部變量類(lèi)型推斷。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06

最新評(píng)論