Java程序設(shè)計(jì)-第4章-Java面向?qū)ο蟪绦蛟O(shè)計(jì)_第1頁
Java程序設(shè)計(jì)-第4章-Java面向?qū)ο蟪绦蛟O(shè)計(jì)_第2頁
Java程序設(shè)計(jì)-第4章-Java面向?qū)ο蟪绦蛟O(shè)計(jì)_第3頁
Java程序設(shè)計(jì)-第4章-Java面向?qū)ο蟪绦蛟O(shè)計(jì)_第4頁
Java程序設(shè)計(jì)-第4章-Java面向?qū)ο蟪绦蛟O(shè)計(jì)_第5頁
已閱讀5頁,還剩58頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

項(xiàng)目

Student類的變幻一、教學(xué)目標(biāo)掌握類、對(duì)象的Java實(shí)現(xiàn)。掌握J(rèn)ava構(gòu)造方法的使用。掌握J(rèn)ava中方法的重載。掌握J(rèn)ava中類的繼承。掌握J(rèn)ava中接口的使用。二、教學(xué)重點(diǎn)類的定義三、教學(xué)難點(diǎn)類的繼承四、預(yù)備知識(shí)(一)面向?qū)ο蟮幕靖拍?/p>

1.什么是類客觀世界是由各種各樣的事物(即對(duì)象)所組成的,每個(gè)事物都有自己的靜態(tài)特性和動(dòng)態(tài)行為,不同事物間的相互聯(lián)系和相互作用就構(gòu)成了各種不同的系統(tǒng),進(jìn)而構(gòu)成了整個(gè)客觀世界。在主觀世界里把具有相似靜態(tài)特性和動(dòng)態(tài)行為的事物(即對(duì)象)綜合為一個(gè)種類(即類)。什么是對(duì)象對(duì)象就是客觀世界客觀存在的任何事物。從一本書、一個(gè)人、一家圖書館、一家極其復(fù)雜的自動(dòng)化工廠、一架航天飛機(jī)都可看作是對(duì)象。對(duì)象不僅能表示有形的實(shí)體,也能表示無形的(抽象的)規(guī)則、計(jì)劃或事件。每個(gè)對(duì)象都有自己的靜態(tài)特征和動(dòng)態(tài)形為3.面向?qū)ο蟮幕咎卣鳎?)封裝性封裝使數(shù)據(jù)和操作該數(shù)據(jù)的方法封裝為一個(gè)整體。封裝的目的在于把對(duì)象的設(shè)計(jì)者和對(duì)象的使用者分開,使用者不需要知道行為實(shí)現(xiàn)的細(xì)節(jié),只須用設(shè)計(jì)者提供的消息來訪問該對(duì)象。借助于封裝,有助于提高類和系統(tǒng)的安全性。Java語言中,類是封裝的最基本單位。(2)繼承性繼承是類不同抽象級(jí)別之間的關(guān)系,是子類自動(dòng)共享父類數(shù)據(jù)和方法的機(jī)制。通過類的繼承關(guān)系,使公共的特性能夠共享,提高了軟件的重用性和可擴(kuò)展性。(3)多態(tài)性對(duì)象根據(jù)所接收的消息產(chǎn)生行為,同一消息為不同的對(duì)象接受時(shí)可產(chǎn)生完全不同的行動(dòng),這種現(xiàn)象稱為多態(tài)性。多態(tài)性可以認(rèn)為是在一個(gè)給定的類繼承層次結(jié)構(gòu)中,同名的行為(方法)可在不同類中具有不同的表現(xiàn)形式(如方法的重寫)。模塊1

創(chuàng)建一個(gè)類一個(gè)典型的Java語言中類的實(shí)例,該實(shí)例通過

Student類對(duì)學(xué)生進(jìn)行詳細(xì)的描述。代碼如下:

package

chap02;public

class

Student{//類變量public

static

int

intCounter=0;//實(shí)例變量

String

strName;boolean

blGender=false;//false代表"女"

int

intAge;double

dblHeight;double

dblWeight;//類方法public

static

void

getCounter(){System.out.println("學(xué)生總數(shù):"+++intCounter);}//實(shí)例方法public

void

getInfo(){System.out.print("姓名:"+strName+"\t");System.out.print("性別:"+blGender+"\t");System.out.print("年齡:"+intAge+"歲\t");System.out.print("身高:"+dblHeight+"厘米\t");System.out.println("體重:"+dblWeight+"公斤");}//無參構(gòu)造方法public

Student(){intAge=18;dblHeight=170;

//單位為厘米dblWeight=65;

//單位為公斤}//帶參構(gòu)造方法public

Student(String

n,boolean

g,int

a,double

h,double

w){strName=n;blGender=g;intAge=a;dblHeight=h;

//單位為厘米dblWeight=w;

//單位為公斤}public

static

void

main(String[]

args){Student

liuzc=new

Student();liuzc.getInfo();Student.getCounter();Student

liujin=new

Student("劉津",false,10,135,35);liujin.getInfo();Student.getCounter();}}相關(guān)知識(shí)點(diǎn):1.類定義對(duì)一個(gè)用戶自定義的類,要為類取一個(gè)名字,并指明類中包含哪些變量和方法以及相應(yīng)的類型、實(shí)現(xiàn)等,這稱為類的定義。類定義語句的一般形式為:[public][abstract][final]class類名[extends父類名[implements接口名表]{成員變量定義//類體成員方法定義····

}說明:(1)其中class、extends和implements都是Java的關(guān)鍵字。(2)在類聲明的各部分中,關(guān)鍵字class和類名是必須的,其它部分可根據(jù)需要選用;(3)public、abstract、final關(guān)鍵字順序可以互換,但clasextends和implements順序不能互換。類聲明中關(guān)鍵字及其含義成員變量的定義

(1)成員變量的分類類變量:描述類的靜態(tài)特性,被該類所有的對(duì)象所共享,即使沒有創(chuàng)建類的對(duì)象,這些變量也存在。無

論創(chuàng)建多少個(gè)該類的對(duì)象,都共享一個(gè)副本;當(dāng)類變

量的值發(fā)生改變,類的所有對(duì)象都將使用改變后的值。實(shí)例變量:與具體對(duì)象相關(guān),創(chuàng)建一個(gè)對(duì)象的同時(shí)也創(chuàng)建類的實(shí)例變量,因此每一個(gè)對(duì)象均有自己的實(shí)例變量副本和賦值。這些實(shí)例變量,記錄了對(duì)象的狀態(tài)和特征值,使每個(gè)對(duì)象具有各種的特點(diǎn),以區(qū)分于不同的對(duì)象。(2)成員變量的聲明①存取修飾符:用于控制變量的訪問權(quán)限,控制變量在不同類(或包)中的訪問權(quán)限為了體現(xiàn)類的封裝性,類的成員變量修飾符通常定義為private。final關(guān)鍵字:表示將變量聲明為最終變量。聲明為final的變量,不可對(duì)其重新賦值,必須在聲明時(shí)包含一個(gè)初時(shí)化語句來對(duì)其賦值。因此final常用于聲明常量,在定義常量時(shí),標(biāo)識(shí)符所有字母一般均用大寫。transient關(guān)鍵字:可用transient關(guān)鍵字將實(shí)例變量聲明為持久對(duì)象的特殊部分。static關(guān)鍵字:成員變量前使用static修飾符,說明定義的是類變量。反之,說明定義的實(shí)例變量。volatile關(guān)鍵字:說明變量是并發(fā)控制中的異步變量。在每次使用volatile類型的變量時(shí)都要將它從存儲(chǔ)器中重新裝載并在使用后存回存儲(chǔ)器中。成員變量聲明關(guān)鍵字·

類變量定義必須使用static關(guān)鍵字,因此,類變量也稱為靜態(tài)成員域或靜態(tài)變量,而實(shí)例變量也稱為非靜態(tài)成員域;實(shí)例變量可用transient關(guān)鍵字,將其聲明為持久對(duì)象的特殊部分。關(guān)鍵字transient不能與final和static同時(shí)使用;在變量定義時(shí),可同時(shí)給其賦初值,將其初時(shí)化。3.成員方法定義

(1)什么是方法提示什么是方法方法是一個(gè)包含一條或多條語句的代碼塊,用來完成一個(gè)相對(duì)獨(dú)立的功能。方法有自己的名稱以及可以重復(fù)使用的變量。方法一旦定義好,程序員可以根據(jù)需要在程序多個(gè)不同的地方,通過使用方法名稱來調(diào)用執(zhí)行它以完成特定的功能。方法的分類類方法描述類的動(dòng)態(tài)行為(或操作),即使該類沒有對(duì)象時(shí),也可以執(zhí)行類方法。實(shí)例方法描述對(duì)象的動(dòng)態(tài)行為(或操作),只可以在特定的對(duì)象中執(zhí)行,如果沒有對(duì)象存在時(shí),就無法執(zhí)行任何實(shí)例方法。方法的聲明方法聲明中的關(guān)鍵字存取修飾符:用于控制方法的訪問權(quán)限。成員方法修飾符通常為public。final關(guān)鍵字:禁止子類用同名、同參數(shù)方法覆蓋它。static關(guān)鍵字:表示聲明的方法是類方法。abstract關(guān)鍵字:聲明為抽象方法。synchronized關(guān)鍵字:將方法聲明為同步方法。throws異常表:指明方法可能拋出的異?!?/p>

native修飾符一般用來聲明用其他語言如C、C++、FORTRAN、匯編等書寫方法體并具體實(shí)現(xiàn)方法功能的特殊方法。由于native方法的

方法體使用其他語言編寫。所以所有的native方法都沒有方法體。native方法可應(yīng)用于實(shí)時(shí)

性強(qiáng)、執(zhí)行效率高,運(yùn)行速度要求較高的場(chǎng)合。方法體提示方法內(nèi)部定義的變量稱為局部變量,局部變量的生存期只限于定義它的語句塊中;類的實(shí)例方法可以訪問類的所有成員包括實(shí)例變量、實(shí)例方法、類變量、類方法;類方法只能訪問類變量,不能訪問任何實(shí)例變量或?qū)嵗椒ā?構(gòu)造方法在Java中,任何變量在被使用前都必須先設(shè)置初值。

Java提供了為類的成員變量賦初值的專門功能:構(gòu)造方法(constructor)。構(gòu)造方法是一種特殊的成員方法,它的特殊性反映在如下幾個(gè)方面:(1)構(gòu)造方法名與類名相同。(2)構(gòu)造方法不返回任何值,也沒有返回類型。(3)每一個(gè)類可以有零個(gè)或多個(gè)構(gòu)造方法。(4)構(gòu)造方法在創(chuàng)建對(duì)象時(shí)自動(dòng)執(zhí)行,一般不能顯式地直接調(diào)用。構(gòu)造方法的功能提示構(gòu)造方法的名稱要求與類名同名;不允許給構(gòu)造方法指定返回類型,也不能給構(gòu)造方法指定返回值;構(gòu)造方法在使用new語句進(jìn)行對(duì)象實(shí)例化時(shí)自動(dòng)調(diào)用。一是通知Java虛擬機(jī)創(chuàng)建類的對(duì)象;二是對(duì)創(chuàng)建的對(duì)象進(jìn)行初始化。默認(rèn)構(gòu)造方法Public

Student(){}//無參構(gòu)造方法public

Student(){intAge=18;dblHeight=170;//單位為厘米dblWeight=65;

//單位為公斤}//帶參構(gòu)造方法public

Student(String

n,boolean

g,inta,double

h,double

w){strName=n;blGender=g;intAge=a;dblHeight=h;

//單位為厘米dblWeight=w;

//單位為公斤}構(gòu)造方法重載5方法重載方法重載方法重載指在同一個(gè)類中存在2個(gè)或2個(gè)以上的同名方法。方法重載時(shí)同名的方法可以是參數(shù)類型不同、參數(shù)個(gè)數(shù)不同、參數(shù)順序不同;方法重載也是OOP多態(tài)性的表現(xiàn)。構(gòu)造方法重載也是方法重載的一種體現(xiàn)。6.創(chuàng)建和使用對(duì)象(1)使用new創(chuàng)建類的一個(gè)對(duì)象如:Student

liuzc=new

Student();通過new運(yùn)算符創(chuàng)建對(duì)象時(shí),Java虛擬機(jī)將在堆中開辟一個(gè)內(nèi)存空間,用于存放對(duì)象的實(shí)例變量,并根據(jù)指定的構(gòu)造方法和類的定義初始化這些實(shí)例變量。(2)使用對(duì)象:使用“.”進(jìn)行以下操作給類的屬性賦值:對(duì)象名.屬性(或稱數(shù)據(jù)成員)調(diào)用類的方法:對(duì)象名.方法名()如:liuzc.getInfo();模塊2 繼

承項(xiàng)目目標(biāo):定義一個(gè)繼承于學(xué)生類的描述大學(xué)生特性和行為的類College.package

chap02;public

class

College

extends

Student{private

String

strMajor;public

void

getMajor()

{System.out.println("專業(yè):"+strMajor);//調(diào)用子類的實(shí)例量//System.out.println("身高:"+dblHeight);//引用父類的實(shí)例變量}public

College(String

n,boolean

g,inta,double

h,double

w,String

m){strName=n;blGender=g;intAge=a;dblHeight=h;//單位為厘米

dblWeight=w;//單位為公斤

strMajor=m;}//主方法public

static

void

main(String[]

args){College

wangym;wangym=newCollege("Wangym",false,33,168,56,"軟件技術(shù)");wangym.getInfo();//調(diào)用父類的實(shí)例方法

wangym.getMajor();//調(diào)用子類的實(shí)例方法}}相關(guān)知識(shí):1.繼承繼承是面向?qū)ο蟪绦蛟O(shè)計(jì)的另一個(gè)重要特色,類繼承也稱為類派生,是指一個(gè)類可以繼承其他類的非私有成員,實(shí)現(xiàn)代碼復(fù)用。被繼承的類稱為父類或超類,父類包括所有直接或間接被繼承的類;繼承父類或超類后產(chǎn)生的類稱為派生類或子類。Java語言以O(shè)bject類作為所有類的父類,所有的類都是直接或間接地繼承Object類得到的。Java還提供不同層次的標(biāo)準(zhǔn)類,使用戶可根據(jù)需要派生自己的類。在Java語言中,只允許單繼承。所謂單繼承是指每個(gè)類只有一個(gè)父類,不允許有多個(gè)父類。但一個(gè)類允許同時(shí)擁有多個(gè)子類,這時(shí)這個(gè)父類實(shí)際上是所有子類的公共成員變量和公共方法成員的集合,而每一個(gè)子類則是父類的特殊化,是對(duì)公共成員變量和方法成員的功能、內(nèi)涵方面的擴(kuò)展和延伸。Java語言的多繼承可通過接口來實(shí)現(xiàn)。類繼承不改變成員的訪問權(quán)限,父類中的成員為公有的或被保護(hù)的,則其子類的成員訪問權(quán)限也繼承為公有的或被保護(hù)的。2.類繼承的實(shí)現(xiàn)Java中的繼承是通過extends關(guān)鍵字來實(shí)現(xiàn)的,在定義新類時(shí)使用extends關(guān)鍵字指明新類的父類,就在兩個(gè)類之間建立了繼承關(guān)系。定義子類[類修飾符]class類名extends父類名{//類體}如果,父類和子類不在同一個(gè)包中,則需要使用import語句來引入父類所在的包。子類具體要實(shí)現(xiàn)的功能由類體中相應(yīng)的成員變量和方法來實(shí)現(xiàn),它們的編寫和一般的類是完全相同的。extends后即為父類名,若父類名又是某個(gè)類的子類,則定義的類也是該類的(間接)子類。若無extends子句,則該類為java.lang.Object的子類。類繼承的傳遞性類繼承具有傳遞性,即子類繼承父類的所有非私有成員,也繼承父類的父類直至祖先所有的所有非私有成員。類的成員覆蓋在類的繼承中,若子類(派生類)新增的成員名稱與父類(超類)成員相同,則稱為成員覆蓋(overriding)。在子類中定義與父類同名成員的目的是修改父類的屬性和行為。成員變量的覆蓋若子類聲明了與父類同名的變量,則父類的變量被隱藏起來,直接使用的是子類的變量,但父類的變量仍占據(jù)空間,可通過super或父類名來訪問。成員方法覆蓋子類也可以定義與父類同名的方法,實(shí)現(xiàn)對(duì)父類方法的覆蓋。成員方法的覆蓋與成員變量的隱藏的不同之處在于:子類隱藏父類的成員變量只是使得它不可見,父類的同名成員變量在子類對(duì)象中仍然占據(jù)自己的存儲(chǔ)空間;而子類成員方法對(duì)父類同名方法的覆蓋將清除父類方法占用的內(nèi)存空間,從而使得父類的方法在子類對(duì)象中不復(fù)存在。方法的覆蓋中需注意的是:子類在重新定義父類已有的方法時(shí),應(yīng)保持與父類完全相同的方法頭聲明。3.派生類的初始化在創(chuàng)建派生類的對(duì)象時(shí),使用派生類的構(gòu)造方法對(duì)其初始化,不但要對(duì)自身的成員變量賦初

值,還要對(duì)父類的的成員變量賦初值。因?yàn)槌?/p>

員變量賦初值通常在構(gòu)造方法中完成,因此在

Java語言中,允許派生類繼承父類的構(gòu)造方法。構(gòu)造方法的繼承遵循如下的原則:(1)若父類是無參數(shù)的構(gòu)造方法,則子類無條件的繼承該構(gòu)造方法。(2)若子類無自己的構(gòu)造方法,則它將繼承父類的無參構(gòu)造方法作為自己的構(gòu)造方法;若子類有自己的構(gòu)造方法,則在創(chuàng)建子類對(duì)象時(shí),它將先執(zhí)行繼承自父類的無參構(gòu)造方法,然后再執(zhí)行自己的構(gòu)造方法。(3)若父類是有參數(shù)的構(gòu)造方法,子類可以通過在自己的構(gòu)造方法中使用super關(guān)鍵字來調(diào)用它,但這個(gè)調(diào)用語句必須是子類構(gòu)造方法的第一個(gè)可執(zhí)行語句。模塊3

College類的改進(jìn)package

chap02;public

class

College

extendsStudent{private

String

strMajor;public College(String

n,boolean

g,int

a,doubleh,double

w,String

m){super(n,g,a,h,w);strMajor=m;}public

void

getInfo(){

super.getInfo();//調(diào)用父類的實(shí)例方法System.out.println("專業(yè):"+strMajor);//調(diào)用子類的實(shí)例量}public

static

void

main(String[]

args)

{College

cs;cs=new

College("Wangym",false,19,168,56,"軟件技術(shù)");cs.getInfo();//調(diào)用子類的實(shí)例方法Student

s1=new

Student("李華",false,19,165,50);s1.getInfo();//調(diào)用父類的實(shí)例方法}}相關(guān)知識(shí):1.super的使用super代表當(dāng)前類的父類。通過super可以調(diào)用父類的構(gòu)造方法和父類的成員(成員變量和成員方法)。調(diào)用父類構(gòu)造方法;引用父類成員。2.方法重寫方法重寫是指子類從父類中繼承方法時(shí),需要修改父類中定義的方法(即只修改方法體,方法的參數(shù)類型、個(gè)數(shù)、順序以及返回值保持相同)方法重寫時(shí)子類對(duì)父類中的方法保持名字不變,參數(shù)類型、個(gè)數(shù)和順序不變,只改變方法體,以使子類和父類通過相同的方法完成不同的操作;方法重寫體現(xiàn)了動(dòng)態(tài)多態(tài)性,即在程序運(yùn)行時(shí)而不是在程序編譯時(shí)決定執(zhí)行哪一個(gè)方法;父類中的實(shí)例方法是可訪問時(shí)(取決于訪問修飾符)才可以被重寫;類方法(靜態(tài)方法)可以被繼承,但不能被重寫。子類重寫父類方法時(shí),將覆蓋父類方法,子類對(duì)象調(diào)用被覆蓋的方法,將執(zhí)行子類定義的方法,超類中定義的方法被隱藏。在子類內(nèi)部通過super能夠調(diào)用超類中被覆蓋的方法方法重寫this的使用模塊4package

chap04;//父類class

Father{String

strName;int

intAge;public

void

setValue(int

a){intAge=a;}}//子類class

Son

extends

Father{String

strName;

String

strGender;public

void

show(){super.setValue(45);System.out.println("父類中的strName值為:"+super.strName);System.out.println("子類中的strName值為:"+strName);System.out.println("父類中的intAge值為:"+Age);System.out.println("子類中的strGender值為:"+strGender);}public

Son(String

n1,String

n2,String

g){this.strName=n1;super.strName=n2;strGender=g;}}//主類public

class

Demo4_5{public

static

void

main(String

args[]){Son

s=new

Son("張三","張大","男");

s.show();}}相關(guān)知識(shí):

this操作符this代表當(dāng)前對(duì)象本身。通過this變量不僅可以引用當(dāng)前對(duì)象的實(shí)例變量,也可引用當(dāng)前對(duì)象的實(shí)例方法;由于類變量與類方法不屬于具體的類對(duì)象,因此不能通過this變量引用類變量和類方法,在類方法中也不能使用this變量。模塊5

抽象類與抽象方法項(xiàng)目目標(biāo):說明用于描述抽象形狀的類(Shape)和具體的圓形(Circle)、矩形類(Rectangle)之間的關(guān)系。package

chap04;//形狀類abstract

class

Shape

{public

abstract

void

getArea();}//圓類class

Circle

extends

Shape{final

double

PI=3.1415926;double

dblRadius;public

void

getArea(){System.out.println("圓的面積為:"+PI*dblRadius*dblRadius);}public

Circle(double

r){this.dblRadius=r;}}//矩形類class

Rectangle

extends

Shape{double

dblLength;double

dblWidth;public

void

getArea(){System.out.println("矩形的面積為:"+dblLength*dblWidth)}public

Rectangle(double

l,double

w){this.dblLength=l;this.dblWidth=w;}}//主類public

class

TestClass{public

static

void

main(String

args[]){Circle

cc=new

Circle(5.6);cc.getArea();Rectangle

rt=new

Rectangle(8,6);rt.getArea();}}抽象類:沒有任何對(duì)象,只可作為一個(gè)模板用于創(chuàng)建派生類,以及為面向?qū)ο筇峁└`活的多態(tài)機(jī)制。抽象方法:在聲明時(shí)必須在方法返回類型前添加abstract關(guān)鍵字;方法的定義只需一個(gè)聲明,無需方法體,聲明以“;”結(jié)束。抽象類定義的一般格式:[public]abstract

class類名[extends父類名][implements接口名表]{類體}抽象方法聲明的一般格式:[存取修飾符]abstract[方法返回類型]方法名([形式參數(shù)表])[throws異常表];抽象類提示抽象類中不一定包含抽象方法,但包含抽象方法的類一定是抽象類;使用抽象類就是為了繼承,抽象類中一般只有成員方法;繼承抽象類的子類必須要重寫抽象類中的抽象方法.抽象方法必須在抽象類中,但抽象類中可以沒有抽象方法.模塊6

最終類和最終方法1.final修飾的類稱為最終類,final修飾的方法稱為最終方法?!?/p>

最終類不能被子類繼承,例如:

public

final

class

A{//

…}class

B

extends

A{

//繼承最終類將產(chǎn)生錯(cuò)誤//

…}上述代碼中,A是最終類,B繼承A將產(chǎn)生錯(cuò)誤,不能通過編譯2.最終方法通過在子類中定義與超類同名的方法成員,覆蓋超類的方法成員,改變了超類原有的特征。有時(shí)可能程序員不希望子類修改超類原有的特性,這時(shí)可以將對(duì)應(yīng)的方法定義為最終(final)方法,子類不再可以覆蓋該方法。例如:class

A{final

void

Method1(){System.out.println("This

is

a

final

method");}}當(dāng)從A類派生子類時(shí),子類不可以定義與Method1形式相同的方法。提示出于保密或其它設(shè)計(jì)上的原因,希望類或類中成員變量、成員方法不被修改或重寫,可以通過Java提供的final修飾符來實(shí)現(xiàn)。在類定義時(shí),可使用final修飾符使類不被繼承;在定義成員變量時(shí),可通過final修飾符定義常量;在定義方法時(shí),可使用final修飾符避免方法被子類重寫。模塊7 接口項(xiàng)目目標(biāo):主板上的PCI插槽就是現(xiàn)實(shí)中的接口,你可以把聲卡,網(wǎng)卡都插在PCI插槽上,而不用擔(dān)心那個(gè)插槽是專門插哪個(gè)的。原因是做主板的廠家和做各種卡的廠家都遵守了統(tǒng)一的規(guī)定,包括尺寸、排線等等。但是各種卡的內(nèi)部結(jié)構(gòu)是一樣的么?答案必然是否定的!我們來模擬一下。//這是接口,相當(dāng)于主板上的PCI插槽

interface

IPCI{void

start();void

stop();}//網(wǎng)卡class

NetworkCard

implements

IPCI

{public

void

start()

{System.out.println("網(wǎng)絡(luò)傳送...");}public

void

stop()

{System.out.println("關(guān)閉網(wǎng)絡(luò)!");}}//聲卡class

SoundCard

implements

IPCI

{public

void

start()

{System.out.println("聲卡開啟...啦啦啦..");}public

void

stop()

{System.out.println("關(guān)閉聲卡!");}}//主板調(diào)用接口的運(yùn)行方法,也就是調(diào)用PCI的函數(shù)class

MainBoard

{public

void

usePCICard(IPCI

p)

{p.start();p.stop();}}public

class

Assembler

{public

static

void

main(String[]

args)

{MainBoard

mainBoard

=

new

MainBoard();NetworkCard

networkCard

=

newNetworkCard();mainBoard.usePCICard(networkCard);SoundCard

sc

=

new

SoundCard();mainBoard.usePCICard(sc);}}程序執(zhí)行結(jié)果:網(wǎng)絡(luò)傳送...關(guān)閉網(wǎng)絡(luò)!聲卡開啟...啦啦啦..關(guān)閉聲卡!相關(guān)知識(shí):1.接口的定義在Java語言中,接口被描述為一組方法聲明和常量的集合。接口只定義了一組方法協(xié)議(或稱標(biāo)準(zhǔn)),但沒有作任何具體實(shí)現(xiàn)。接口定義的一般形式:[public]interface接口名[extends父接口名表]{//接口體(通常包含抽象方法和常量值的定義)}接口方法的聲明,一般格式為:[public][abstract][方法返回類型]方法名([形式參數(shù)表])[throws異常表];提示:接口中常量的默認(rèn)修飾符是public、final。方法的默認(rèn)修飾符是public、abstract。2.接口的實(shí)現(xiàn)實(shí)現(xiàn)接口的定義格式如下:[public][abstract][final]class類名[extends父類名]implements接口名表{…接口方法實(shí)現(xiàn)…}提示接口實(shí)現(xiàn)必須包含“implements接口名表”部分。接口只定義了一個(gè)系統(tǒng)或包的接口界面,該接口界面需由具體的類給予實(shí)現(xiàn)。一個(gè)類可同時(shí)實(shí)現(xiàn)多個(gè)接口,但要求這些接口中不能存在具有相同名稱,但返回類型或修飾符不一樣的方法聲明。在實(shí)現(xiàn)接口時(shí),如接口中定義了常量,則這些常量將自動(dòng)成為實(shí)現(xiàn)該接口類的常量。在使用時(shí),與本類定義的常量無區(qū)別。抽象類與派生類屬于同一種類型(如交通工具和汽車),而接口和實(shí)現(xiàn)該接口的類可以不屬于同一類型(如遙控器和電視機(jī))。接口可看作是一種類型,它雖然不能創(chuàng)建對(duì)象,但可以用于定義接口類型的變量。例如:IRemoteCtrl

irc=null;通過接口類型變量,可以引用各種實(shí)現(xiàn)該接口類型的對(duì)象。接口應(yīng)用實(shí)現(xiàn)多重接口一個(gè)類常常需要實(shí)現(xiàn)多個(gè)接口;在Java語言中,接口還可以通過extends關(guān)鍵字,實(shí)現(xiàn)從另一個(gè)接口的擴(kuò)展。擴(kuò)展接口的語法與繼承類的語法一樣,當(dāng)一個(gè)類實(shí)現(xiàn)繼承了其他接口的接口時(shí),該類必須實(shí)現(xiàn)繼承層次中所有接口中的方法。補(bǔ)充:1.定義包什么是包在Java語言中,與客觀世界中系統(tǒng)相對(duì)應(yīng)的概念稱為包(Package)。包是一種分組機(jī)制。包由一組類和接口組成。它是

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論