国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java中的接口和抽象類(轉)

2019-11-08 00:25:47
字體:
來源:轉載
供稿:網友

  在面向對象的概念中,我們知道所有的對象都是通過類來描述的,但是并不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。   抽象類往往用來表征我們在對問題領域進行分析、設計中得出的抽象概念,是對一系列看上去不同,但是本質上相同的具體概念的抽象,我們不能把它們實例化(拿不出一個具體的東西)所以稱為抽象。   比如:我們要描述“水果”,它就是一個抽象,它有質量、體積等一些共性,但又缺乏特性(蘋果、橘子都是水果,它們有自己的特性),我們拿不出唯一一種能代表水果的東西(因為水果、橘子都不能代表水果),可用抽象類來描述它,所以抽象類是不能夠實例化的。當我們用某個類來具體描述“蘋果”時,這個類就可以繼承描述“水果”的抽象類,我們都知道“蘋果”是一種“水果”。   接口和抽象類中的所有抽象方法不能有具體實現,而應在它們的子類中實現所有的抽象方法(要有函數體,哪怕{}里為空),java的設計者可能為抽象方法的靈活性考慮,每個子類可根據自己的需要來實現抽象方法。 抽象類(abstract class)的定義方式如下:

public abstract class AbstractClass{ public int t;//普通數據成員 public abstract void method1();//抽象方法,抽象類的子類在類中必須實現抽象類中的抽象方法 public abstract void method2(); public void method3();//非抽象方法 public int method4(); public int method4(){ //抽象類中可以賦予非抽象方法的默認行為,即方法的具體實現 } public void method3(){ //抽象類中可以賦予非抽象方法的默認行為,即方法的具體實現 }} 接口(interface)的定義方式如下: public interface Interface{ static final int i;//接口中不能有普通數據成員,只能夠有靜態下的不能被修改的數據成員,static表示全局,final表示不能被修改,可以不用static final修飾,會隱式的聲明為static和final public void method1();//接口中的方法一定是抽象方法,所以不用abstract修飾 public void method2();//接口中不能賦予方法的默認行為,即不能有方法的具體實現}

  簡而言之,抽象類是一個功能不全的類,接口只是一個抽象方法聲明和靜態不能被修改的數據的集合,兩者都不能被實例化。   從某種意義上說,接口是一種特殊形式的抽象類,在Java語言中抽象類表示的是一種繼承關系,一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。在許多情況下,接口確實可以代替抽象類,如果你不需要刻意表達屬性上的繼承的話。   進一步理解,關于Java引入抽象類,接口的目的,向高手請教的答復如下:   1.從類的層次結構上看,抽象類是在層次的頂端,但在實際的設計當中,一般來說抽象類應當是后面才出現。為什么?實際上抽象類的獲取有點像數學中的提取公因式:ax+bx,x就是抽象類,如果你沒有前面的式子,你怎么知道x是不是公因式呢?在這點上,也符號人們認識世界的過程,先具體后抽象。因此在設計過程中如果你看到大量的具體概念并從當中找到其共性時,這個共性的集合就是抽象類應當是沒錯的。   2.interface從表面上看,和抽象類很類似,但用法完全不同,它的基本功能就是把一些毫不相關的類(概念)集合在一起形成一個新的、可集中操作的“新類”。一個典型的例子就是“司機”。誰可以當司機?誰都可以,只要領取了駕照。所以我不管你是學生,白領,藍領還是老板,只要有駕照就是司機。

interface DriverLicence{ License getLicence();} class StudentDriver extends Students implements DriverLicence{ } class WhileCollarEmploeeDriver extends WhileCollarEmployee implements DriverLicence{ } class BlueCollarEmployeeDiver extends BlueCollarEmployee implements DriverLicence{ } class BossDriver extends Boss implements Driver{ } 當我定義了“汽車”類后,我就可以指定“司機”了。 class Car{ setDriver(DriverLicence driver);}

  這時候,Car的對象并不關心這個司機到底是干什么的,他們唯一共同的就是領取了駕照(都實現了DriverLicense接口)。這個,應當是接口最強大的地方也是抽象類無法比擬的。   總結:抽象類是提取具體類的公因式,而接口是為了將一些不相關的類“雜湊”成一個共同的群體。通常我們平時養成良好的習慣就是多用接口,畢竟Java是單繼承,不像C++,但是在需要使用抽象類的時候一定還是要用的(有點類似goto的用法)。

轉自:http://www.cnblogs.com/xiaoao808/archive/2008/03/11/1100886.html
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴青县| 公安县| 金华市| 尼玛县| 达州市| 上饶市| 宜宾市| 秀山| 开原市| 宕昌县| 沧州市| 乌拉特前旗| 冀州市| 巴林右旗| 弥勒县| 巴南区| 基隆市| 兴化市| 连南| 津市市| 龙岩市| 称多县| 定兴县| 营山县| 临漳县| 德州市| 谢通门县| 长子县| 拜城县| 波密县| 旬邑县| 临西县| 普定县| 安远县| 内乡县| 翼城县| 深圳市| 历史| 新巴尔虎右旗| 唐山市| 台南县|