版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第六章面向?qū)ο蟪绦蛟O(shè)計(jì)與開發(fā)(二)本章目標(biāo)掌握方法修飾符掌握抽象類掌握接口理解多態(tài)方法修飾符方法修飾符staticfinalabstractstatic
修飾符static修飾符修飾的方法叫靜態(tài)方法目的使該方法獨(dú)立于類的實(shí)例,使用類去訪問,而不是類實(shí)例,所以也叫類方法調(diào)用靜態(tài)方法的語法為:classname.methodname(
);規(guī)則可以調(diào)用其他靜態(tài)方法必須訪問靜態(tài)數(shù)據(jù)不能使用super或this
關(guān)鍵字調(diào)用final
修飾符final不能修改變量子類不能重寫方法使用final修飾符聲明的變量為常量final
int
sex=“女”;//常量的值不允許改變使用final修飾符聲明的方法為最終方法,子類不能重寫該方法public
final
String
say(){}//子類不能重寫改方法使用final修飾符聲明的類不能被繼承abstract
修飾符由abstract修飾的方法叫抽象方法;由abstract修飾的類叫抽象類抽象方法必須聲明在抽象類中抽象方法語法:abstract
type
method_name(parameter_list);聲明抽象類語法:abstract
class{……
}使用:父類中的某些抽象不包含任何邏輯,并需要在子類中重寫,子類提供這種抽象方法的實(shí)現(xiàn)細(xì)節(jié)abstract
修飾符抽象方法不具有任何實(shí)現(xiàn)代碼abstract
class
Shape
{.
.
.
.
.
.
.
.
.
.
.protected
double
length;protected
double
width;.
.
.
.
.
.
.
.
.
.
..
.
.
.
.
.
.
.
.
.
.abstract
double
area();}class
Square
extends
Shape
{/**
構(gòu)造方法.*@param
num
傳遞至構(gòu)造方法的參數(shù)*@param
num1
傳遞至構(gòu)造方法的參數(shù)*/Square(final
double
num,
final
double
num1)
{super(num,
num1);}/**計(jì)算正方形的面積.@return
double*/double
area()
{System.out.println(“正方形的面積為:");return
length
*
width;}}abstract
修飾符如果一個(gè)類中存在一個(gè)或多個(gè)抽象方法,則該類必須是一個(gè)抽象類一個(gè)抽象類中可以存在一個(gè)或多個(gè)抽象方法,也可以不存在抽象方法一個(gè)類繼承了一個(gè)抽象類,則該類必須實(shí)現(xiàn)(重寫)父類中的所有的抽象方法,否則該類也必須聲明為抽象類抽象類主要用于子類繼承,以規(guī)范子類的行為abstract抽象類不能被實(shí)例化構(gòu)造方法和static方法不能是抽象的父類的抽象方法往往在子類中實(shí)現(xiàn)接口接口就是某個(gè)事物對(duì)外提供的一些功能的申明可以利用接口實(shí)現(xiàn)多態(tài),同時(shí)接口也彌補(bǔ)了Java單一繼承的弱點(diǎn)接口(interface)是抽象方法和常量值的定義的集合從本質(zhì)上講,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,而沒有變量和方法的實(shí)現(xiàn)。使用interface關(guān)鍵字定義接口生活中的接口電腦主板上的PCI插槽的規(guī)范就類似于Java接口聲卡顯卡網(wǎng)卡每種卡的內(nèi)部結(jié)構(gòu)都不相同,可以把聲卡、網(wǎng)卡、顯卡都插在PCI插槽上,而不用擔(dān)心哪個(gè)插槽是專門插哪個(gè)卡的主板什么是Java接口一個(gè)Java接口是一些方法特征的集合,但沒有方法的實(shí)現(xiàn)public
interface
PCI
{public
void
start();public
void
stop();}class
SoundCard
implements
PCI
{public
void
start()
{System.out.println("Du
du...");}public
void
stop()
{System.out.println("Sound
stop!");}}Java接口中定義的方法在不同的地方被實(shí)現(xiàn),可以具有完全不同的行為這是Java接口,相當(dāng)于主板上的PCI插槽的規(guī)范class
NetworkCard
implements
PCI
{public
void
start()
{System.out.println("Send...");}public
void
stop()
{System.out.println("Network
stop!");}}聲卡、網(wǎng)卡都遵守了PCI插槽的規(guī)范,但行為完全不同什么是Java接口public
class
Assembler
{public
static
void
main(String[]
args)
{PCI
nc
=
new
NetworkCard();PCI
sc
=
new
SoundCard();nc.start();sc.start();}}可以使用Java接口定義規(guī)范運(yùn)行時(shí),根據(jù)實(shí)際創(chuàng)建的對(duì)象類型調(diào)用相應(yīng)的方法實(shí)現(xiàn)Du
du...Send...控制臺(tái)輸出21接口特征接口可以多重實(shí)現(xiàn)接口中聲明的屬性默認(rèn)為
public
static final
的;也只能是
public
static
final
的接口中只能定義抽象方法,而且這些方法默認(rèn)為public的、也只能是public的接口可以繼承其它的接口,并添加新的屬性和抽象方法接口只能用來實(shí)現(xiàn),不能創(chuàng)建實(shí)例對(duì)象多個(gè)無關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口一個(gè)類可以實(shí)現(xiàn)多個(gè)無關(guān)的接口與繼承關(guān)系類似,接口與實(shí)現(xiàn)類之間存在多態(tài)性接口實(shí)例為加中學(xué)校開發(fā)這樣一個(gè)小系統(tǒng),包含類型:教員、學(xué)校、打印機(jī),具體要求如下:教員、以及學(xué)校都具有方法:輸出詳細(xì)信息學(xué)校具有屬性:打印機(jī),能夠通過學(xué)校的打印機(jī)打印教員或?qū)W校的詳細(xì)信息系統(tǒng)要具備良好的可擴(kuò)展性與可維護(hù)性打印教員學(xué)校教員
詳細(xì)信息學(xué)校
詳細(xì)信息detail方法(輸出詳細(xì)信息)接口實(shí)例以下這個(gè)解決方案中存在著什么問題?public
class
Teacher
{//輸出教員的詳細(xì)信息
public
String
detail(){return“本人是加中教員";}}public
class
School
{private
Printer
printer
=
new
Printer();//輸出中心的詳細(xì)信息
public
String
detail(){return“這里是西安加中學(xué)校";}//使用打印機(jī)打印教員信息
public
void
print(Teacher
t){printer.print(t.detail());}//使用打印機(jī)打印學(xué)校信息
public
void
print(School
s){printer.print(s.detail());}}public
class
Printer
{public
void
print(String
content)
{System.out.println("開始打印:");System.out.println(content);}}每增加一種新類型,都需要增加相應(yīng)的print(新增類型名obj)方法——程序的可擴(kuò)展性及可維護(hù)性極差——這不符合系統(tǒng)的要求接口實(shí)例顯然,本系統(tǒng)符合使用多態(tài)性的條件教員學(xué)校detail方法(負(fù)責(zé)輸出詳細(xì)信息)學(xué)校
詳細(xì)信息122教員1
詳細(xì)信息可以通過多態(tài)性解決這個(gè)問題嗎?回顧多態(tài)的含義:實(shí)現(xiàn)同一個(gè)接口,使用不同的實(shí)例而執(zhí)行不同操作接口實(shí)例在這個(gè)系統(tǒng)中,存在繼承關(guān)系嗎?教員、學(xué)校屬于兩種不同的類型,無法通過“is-a”找到一個(gè)合適的父類教員、學(xué)校都存在一個(gè)共同的方法特征:detail,它們對(duì)
detail方法有各自不同的實(shí)現(xiàn)——這完全符合Java接口的定義定義一個(gè)Java接口,在其中定義detail方法,但沒有具體實(shí)現(xiàn)實(shí)現(xiàn)這個(gè)Java接口,不同的類對(duì)detail方法有不同的具體實(shí)現(xiàn)IntroduceableTeacher(教員)School(中心)接口實(shí)例public
interface
Introduceable
{public
String
detail();}public
class
Schoolimplements
Introduceable{private
Printer
printer
=
new
Printer();//輸出中心的詳細(xì)信息
public
String
detail(){return“這里是加中軟件學(xué)校";}//使用中心打印機(jī)打印信息public
void
print(Introduceable
intro){printer.print(intro.detail());}public
class
Teacherimplements
Introduceable{//輸出教員的詳細(xì)信息
public
String
detail(){return“本人是加中教員";}}使用print方法時(shí),參數(shù)可以是任何Introduceable接口的實(shí)現(xiàn)類的對(duì)象,不必再為不同}的類型建立不同的print方法了通過Java接口,我們同樣可以享受到多態(tài)性的好處,大大提高了程序的可擴(kuò)展性及可維護(hù)性使用了Java接口之后,這個(gè)系統(tǒng)有了怎樣的改進(jìn)?小結(jié)定義一個(gè)超人類超人具有人的特性超人具有更多非人類的特性(上天、下地等)內(nèi)部類在一個(gè)類內(nèi)部定義的類稱為內(nèi)部類在外部類中可以直接使用內(nèi)部類,如private
InnerTool
tools
=
new
InnerTool();外部類內(nèi)部類內(nèi)部類內(nèi)部類的完整類名:外部類.內(nèi)部類內(nèi)部類的訪問權(quán)限可以是:public、private、protected、默認(rèn)的內(nèi)部類按作用域劃分:內(nèi)部類成員內(nèi)部類局部?jī)?nèi)部類實(shí)例內(nèi)部類靜態(tài)內(nèi)部類實(shí)例內(nèi)部類定義在類中,并且沒有在其他任何方法內(nèi)部定義的類,稱為成員內(nèi)部類,如果一個(gè)成員內(nèi)部類沒有static修飾則該成員內(nèi)部類是一個(gè)實(shí)例內(nèi)部類實(shí)例內(nèi)部類的特點(diǎn):創(chuàng)建實(shí)例內(nèi)部類實(shí)例時(shí),外部類的實(shí)例必須存在Outer.InnerTooltool=newOuter().newInnerTool();//創(chuàng)建內(nèi)部類InnerTool對(duì)象實(shí)例內(nèi)部類的實(shí)例自動(dòng)擁有外部類的實(shí)例的引用。在內(nèi)部類中可以直接訪問外部類 的所有成員(成員變量和成員方法)外部類實(shí)例與內(nèi)部類實(shí)例之間是一對(duì)多的關(guān)系,一個(gè)內(nèi)部類實(shí)例只會(huì)引用一個(gè)外部 類實(shí)例,而一個(gè)外部類實(shí)例對(duì)應(yīng)零個(gè)或多個(gè)內(nèi)部類實(shí)例。在外部類中不能直接訪 問內(nèi)部類的成員,必須通過內(nèi)部類的實(shí)例去訪問。在實(shí)例內(nèi)部類中不能定義靜態(tài)成員,而只能定義實(shí)例成員。如果實(shí)例內(nèi)部類B與外部類A包含同名屬性,那么在B中,this.屬性名表示類B的成 員,A.this.屬性表示類A的屬性。靜態(tài)內(nèi)部類靜態(tài)內(nèi)部類是成員內(nèi)部類的一種,用static修飾靜態(tài)內(nèi)部類的特點(diǎn):靜態(tài)內(nèi)部類的實(shí)例不會(huì)自動(dòng)擁有外部類的實(shí)例引用,在創(chuàng)建內(nèi)部類的實(shí)例時(shí),不必創(chuàng)建外部類的實(shí)例。class
A{public
static
class
B{int
v;}}創(chuàng)建B的實(shí)例,A.B
b=new
A.B();靜態(tài)內(nèi)部類可以直接訪問外部類的靜態(tài)成員,如果訪問外部類的實(shí)例成員 就必須通過外部類的實(shí)例去訪問。在靜態(tài)內(nèi)部類中可以定義靜態(tài)屬性和實(shí)例屬性可以通過完整的類名直接訪問靜態(tài)內(nèi)部類的靜態(tài)屬性局部?jī)?nèi)部類指定義在方法內(nèi)部的內(nèi)部類局部?jī)?nèi)部類的作用域僅限于方法內(nèi)部,而且局部?jī)?nèi)部類不能定義訪問權(quán)限匿名類匿名類是一種特殊的內(nèi)部類,這種類沒有名字。如:class
A{public
void
method(){System.out.println(“A.method”);}public
static
void
main(String[]
args){new
A().method();A
a
=
new
A(){void
method(){System.out.println(“Inner.method”);}}}}匿名類匿名類的特點(diǎn):匿名類本身沒有構(gòu)造方法,但是會(huì)調(diào)用父類的構(gòu)造方法匿名類盡管沒有構(gòu)造方法,但是可以在匿名類中提供一段實(shí)例初始化代碼,JVM會(huì)在調(diào)用父類的構(gòu)造方法后,執(zhí)行這段代碼publicstatic
void
main(String[]
args){intv=1;A
a
=
new
A(){{System.out.println(“初始化…”)}void
method(){System.out.println(“method”);}}}除了可以在外部類的方法內(nèi)定義匿名類以外,還可以在聲明一個(gè)成員變量時(shí)定義匿名類。匿名類匿名類除了可以繼承類以外,還可以實(shí)現(xiàn)接口。Class
Sample{publicstatic
void
main(String[]
args){Thread
t=new
Thread(new
Runnable(){//實(shí)現(xiàn)Runnable接口
public
void
run(){for(int
i=0;i<100;i++){System.out.prinlt(i);}}});t.start();}}匿名類和局部?jī)?nèi)部類一樣,可以訪問外部類的所有成員,如果匿名類位于 一個(gè)方法中,還能訪問所在方法的final類型的變量和參數(shù)。對(duì)象轉(zhuǎn)型一個(gè)基類的引用類型變量可以“指向”其子類的對(duì)象一個(gè)基類的引用不可以訪問其子類對(duì)象新增加的成員(屬性和方法)可以使用引用變量instanceof
類名來判
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年汽車維修與住房租賃一體化服務(wù)合同標(biāo)準(zhǔn)模板3篇
- 二零二五版高端制造業(yè)生產(chǎn)線設(shè)備搬運(yùn)安裝合同3篇
- 2025年推土機(jī)鉤機(jī)租賃與施工方案設(shè)計(jì)合同3篇
- 二零二五版房屋買賣合同范本(違約責(zé)任與賠償)3篇
- 2025年消防排煙系統(tǒng)設(shè)計(jì)與施工監(jiān)理合同范本3篇
- 2025年水電安裝工程節(jié)能評(píng)估與改造合同3篇
- 2025年企業(yè)水電燃?xì)夂贤芾韰f(xié)議
- 2025年培養(yǎng)行業(yè)領(lǐng)軍人物規(guī)劃協(xié)議
- 2025年消防給水系統(tǒng)智能監(jiān)控系統(tǒng)施工合同2篇
- 2025年加盟商店鋪值班合同
- 品質(zhì)經(jīng)理工作總結(jié)
- 供電搶修述職報(bào)告
- 集成電路設(shè)計(jì)工藝節(jié)點(diǎn)演進(jìn)趨勢(shì)
- 新型電力系統(tǒng)簡(jiǎn)介演示
- 特種設(shè)備行業(yè)團(tuán)隊(duì)建設(shè)工作方案
- 眼內(nèi)炎患者護(hù)理查房課件
- 肯德基經(jīng)營策略分析報(bào)告總結(jié)
- 買賣合同簽訂和履行風(fēng)險(xiǎn)控制
- 中央空調(diào)現(xiàn)場(chǎng)施工技術(shù)總結(jié)(附圖)
- 水質(zhì)-濁度的測(cè)定原始記錄
- 數(shù)字美的智慧工業(yè)白皮書-2023.09
評(píng)論
0/150
提交評(píng)論