《Java面向?qū)ο蟪绦蛟O(shè)計》09 抽象類與接口寫字字帖_第1頁
《Java面向?qū)ο蟪绦蛟O(shè)計》09 抽象類與接口寫字字帖_第2頁
《Java面向?qū)ο蟪绦蛟O(shè)計》09 抽象類與接口寫字字帖_第3頁
《Java面向?qū)ο蟪绦蛟O(shè)計》09 抽象類與接口寫字字帖_第4頁
《Java面向?qū)ο蟪绦蛟O(shè)計》09 抽象類與接口寫字字帖_第5頁
已閱讀5頁,還剩23頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

九抽象類與接口第章目標理解抽象類和接口的概念掌握抽象類與接口之間的區(qū)別掌握抽象類和接口的使用概述本章主要介紹抽象類和接口的概念和使用語法。然后對接口與抽象類做了比較。最后介紹Java類庫中的接口Comparable,通過預(yù)定義接口的使用來加深對接口的理解簡介從下往上看繼承層次結(jié)構(gòu)圖,類逐漸變得更通用也更抽象在Animal類中無法為eat()方法創(chuàng)建有意義的實現(xiàn)過程有時我們需要一個基類,此基類只定義可被其所有子類共享的一般形式,而讓各子類來補充實現(xiàn)的細節(jié),這樣的類我們稱為抽象類簡介在Java語言中不支持多繼承魚(Fish)既是一種食物(Food),又是一種動物(Animal)Java語言引入了接口類型。使用接口,Java語言對多繼承提供了有力的支持簡介一個類只能有一個直接的基類,但是可以實現(xiàn)多個接口把Food類改為Food接口,F(xiàn)ish類就能同時繼承Animal類,并實現(xiàn)Food接口抽象類和抽象方法定義抽象類的目的:提供可由子類共享的一般形式,子類根據(jù)需要擴展此抽象類使用關(guān)鍵字abstract來聲明抽象類

abstractclassAnimal

{//抽象類......

}抽象類和抽象方法抽象類通常包含一個或多個抽象方法抽象方法表明該抽象類的子類必須提供此方法的具體實現(xiàn)使用關(guān)鍵字abstract來聲明抽象方法

abstractclassAnimal{//抽象類......

publicabstractvoideat();//抽象方法

......}抽象方法只有方法的聲明,沒有方法體抽象方法用來描述系統(tǒng)具有什么功能具有一個或多個抽象方法的類必須聲明為抽象類抽象類和抽象方法抽象類也可以有具體的屬性和方法構(gòu)造方法不能聲明為抽象方法abstractclassAnimal{//抽象類

protectedStringname;//屬性

publicAnimal(Stringn){//構(gòu)造方法

name=n;

}

publicabstractvoideat();//抽象方法

publicStringgetName(){//具體方法

returnname;

}}抽象類和抽象方法當一個具體類繼承一個抽象類時,必須實現(xiàn)抽象類中聲明的所有抽象方法classDogextendsAnimal{

publicDog(Stringn)

{//子類的構(gòu)造方法

super(n);

}

publicvoideat(){//實現(xiàn)基類的抽象方法

System.out.println(name+"啃骨頭");

}}classCatextendsAnimal{

publicCat(Stringn){

super(n);

}

publicvoideat()

{

System.out.println(name+"吃魚");

}}Catcat=newCat("咪咪");cat.eat();Dogdog=newDog("非非");dog.eat();抽象類和抽象方法抽象類位于繼承樹的上層不能通過new關(guān)鍵字實例化抽象類的對象Animalanimal=newAnimal("非非");//錯誤可以聲明抽象類的引用指向子類的對象,以實現(xiàn)多態(tài)性Animalanimal=newDog("非非");//正確animal.eat();接口的概念和基本特征接口用來定義一個類的表現(xiàn)形式,但不能包含任何實現(xiàn)(接口中的方法都是抽象方法)用關(guān)鍵字interface,可以從類的實現(xiàn)中抽象出一個接口//表示所有能拍照的工具類型publicinterfacePhotographable{

//接口方法:拍照

publicvoidtakePhoto();}接口的概念和基本特征一個或多個類可以實現(xiàn)該接口使用implements關(guān)鍵字指定需要實現(xiàn)的接口實現(xiàn)類必須實現(xiàn)所有的接口方法publicclassCameraimplemetsPhotoGraphable{//照相機類

publicvoidtakePhoto(){//實現(xiàn)接口方法

//照相機拍照

}

......}publicclassMobileTelephoneimplemetsPhotoGraphable{//手機類

publicvoidtakePhoto(){

//手機拍照

}

......}接口的概念和基本特征一個類可以實現(xiàn)多個接口publicinterfaceTimeable

{

//時間接口

voidshowTime();}publicclassMobileTelephoneimplemetsPhotoGraphable,Timeable

{

publicvoidtakePhoto()

{

//手機拍照

}

publicvoidshowTime()

{

//顯示時間

}

......}接口的概念和基本特征接口沒有構(gòu)造方法,不能被實例化允許定義接口類型的引用變量引用實現(xiàn)類的實例PhotoGraphablepg=newCamera();pg.takePhoto();接口的概念和基本特征接口中可以聲明靜態(tài)常量publicinterfaceGforce

{

//常量接口publicstaticfinaldoubleg=9.8;

//靜態(tài)常量必須初始化}publicinterfaceGforce

{doubleg=9.8;

}接口中聲明變量都是隱式的public,static,final類型接口的概念和基本特征接口中的方法默認都是public、abstract類型publicinterfaceA{intCONST=1;voidmethod1();

publicabstractvoidmethod2();}接口的概念和基本特征一個接口不能實現(xiàn)另一個接口,但可以繼承多個其它接口實現(xiàn)類必須實現(xiàn)接口繼承鏈中定義的所有接口方法interfaceA{voidmethodA();}interfaceBextendsA{voidmethodB();}publicclassCimplementsB

{publicvoidmethodA(){

//實現(xiàn)

}

publicvoidmethodB(){

//實現(xiàn)

}}接口的概念和基本特征一個類只能繼承一個直接的父類,但能實現(xiàn)多個接口publicclassSubextendsBaseimplementsA,B,C{......}接口實例不同的幾何形狀如正方形、圓形等,都有一些相同的操作,如計算面積、周長等從具體的形狀類中抽象出一個形狀接口Shape,在Shape接口中定義所有具體形狀所共有的方法將圓周率聲明為靜態(tài)常量interfaceShape{staticfinaldoublePI=3.1415926;doublearea();//計算面積doubleperimeter();//計算周長}接口實例以長方形Rectangle,圓形Circle作為具體的形狀類,分別實現(xiàn)Shape接口classRectangleimplementsShape{doublelength;//長doublewidth;//寬publicRectangle(doublel,doublew){

length=l;

width=w;

}publicdoublearea(){

returnlength*width;

}publicdoubleperimeter(){

return(length+width)*2;

}}classCircleimplementsShape{

doubleradius;//半徑publicCircle(doubler){

radius=r;

}publicdoublearea(){

returnPI*radius*radius;

}publicdoubleperimeter(){return2*PI*radius;

}}接口實例測試類publicclassShapeTest{publicstaticvoidmain(String[]args){Shapes1=newRectangle(5,3);System.out.println("長方形周長是:"+s1.area());Shapes2=newCircle(4);System.out.println("圓形面積是:"+s2.perimeter());

}}比較抽象類與接口共同點代表系統(tǒng)的抽象層都不能被實例化都能包含抽象方法但不必提供具體的實現(xiàn)比較抽象類與接口主要區(qū)別在抽象類中可以為部分方法提供默認的實現(xiàn),接口中只能包含抽象方法向抽象類中添加一個具體的方法,不會對它的子類造成影響,而對于接口,一旦公布就不應(yīng)被改變一個類只能繼承一個直接的父類,這個父類可能是抽象類;但一個類可以實現(xiàn)多個接口預(yù)定義接口Comparable在java.lang包下有一個類Arrays,該類的sort方法可以對一個對象數(shù)組進行排序,但前提是:數(shù)組中的對象必須實現(xiàn)了Comparable接口publicinterfaceComparable{intcompareTo(Objectobj);

//該方法用于指定排序規(guī)則}

預(yù)定義接口Comparable使用Arrays的sort方法來對一個Employee對象數(shù)組進行排序,Employee對象必須實現(xiàn)Comparable接口classEmployeeimplementsComparable{Stringname;intage;......

publicintcompareTo(Objectobj){

//指定按年齡升序排序

Employeeemp=(Employee)obj;

if(age<emp.age)return-1;

elseif(age>emp.agereturn1;

elsereturn0;

}

......}預(yù)定義接口Comparable排序?qū)崿F(xiàn)Employee[]emp={newEmployee("Harry",23), newEmployee("Carl",27), newEmployee("Tony",21)};Arrays.sort(emp);for(inti=0;i<emp.length;i++){System.out.println(emp[

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論