本章內(nèi)容
類的繼承
理解繼承的含義
在Java中定義一個(gè)類時(shí),讓該類通過(guò)關(guān)鍵字extends繼承一個(gè)已有的類,這就是類的繼承(泛化)剑令。
被繼承的類稱為父類(超類舌镶,基類)柱彻,新的類稱為子類(派生類)。
子類繼承父類的所有屬性和方法餐胀,同時(shí)也可以增加自己的屬性和方法哟楷。
ava中只能單繼承,也就是說(shuō)每個(gè)類只能有一個(gè)直接父類否灾;一個(gè)父類可以有多個(gè)子類卖擅。
其實(shí),在繼承關(guān)系中我們還能發(fā)現(xiàn)一個(gè)規(guī)律:子類是父類的一種,也可以說(shuō)“子類就是父類”惩阶。如:人類就是動(dòng)物挎狸,動(dòng)物就是生物。記住這個(gè)定律對(duì)我們理解繼承的概念非常有幫助琳猫。但是伟叛,反過(guò)來(lái)看,父類是子類的說(shuō)法正確嗎脐嫂?
繼承的語(yǔ)法和規(guī)則
示例 Employee.java Worker.java
[修飾符]class子類名extends父類名
? 練習(xí) Officer.java TestOfficer.java?
用java中類的繼承機(jī)制统刮,實(shí)現(xiàn)Officer類,并設(shè)計(jì)一個(gè)測(cè)試程序TestOfficer類账千,來(lái)訪問(wèn)Officer類
繼承的好處
子類實(shí)例化的過(guò)程
子類實(shí)例化時(shí)先實(shí)例化其父類侥蒙,然后實(shí)例化子類痢艺。
要先調(diào)用父類的構(gòu)造器兴猩,父類構(gòu)造器運(yùn)行完畢,才調(diào)用子類的構(gòu)造器射赛。
如果實(shí)例化類D娃善,說(shuō)出構(gòu)造器執(zhí)行的順序论衍。
super和this關(guān)鍵字
super()
this()
作用:調(diào)用本類的構(gòu)造器
只能寫(xiě)在構(gòu)造器的第一行
在同一個(gè)構(gòu)造器中super()和this()不能同時(shí)出現(xiàn)
子類實(shí)例化的過(guò)程
使用默認(rèn)的構(gòu)造器
在子類中的創(chuàng)建構(gòu)造器 示例 Worker.java
在子類中創(chuàng)建構(gòu)造器時(shí),必須調(diào)用父類的構(gòu)造器
子類可以在自己的構(gòu)造器中使用super關(guān)鍵字來(lái)調(diào)用父類的構(gòu)造器
super(參數(shù)1聚磺,參數(shù)2坯台,…);
如果使用super關(guān)鍵字調(diào)用父類構(gòu)造器,必須寫(xiě)在該子類構(gòu)造器的第一行
如調(diào)用的是父類中無(wú)參的構(gòu)造器瘫寝,則可以不寫(xiě)super( )
如果子類中調(diào)用了父類無(wú)參的構(gòu)造器蜒蕾,而父類中沒(méi) 有無(wú)參構(gòu)造器則系統(tǒng)編譯出錯(cuò)
super.
指向父類的引用。
通過(guò)關(guān)鍵字super我們可以指定子類在構(gòu)造時(shí)調(diào)用父類的哪個(gè)構(gòu)造器焕阿,達(dá)到先實(shí)例化父類然后實(shí)例化子類的目的咪啡。
子類的構(gòu)造器默認(rèn)的調(diào)用父類無(wú)參構(gòu)造器,即子類構(gòu)造器中沒(méi)有用super指明調(diào)用父類哪個(gè)構(gòu)造器的話暮屡,實(shí)際上編譯器會(huì)自動(dòng)的在子類構(gòu)造器第 一行加入代碼super( );
this.
指向本類的引用撤摸。
我們知道子類在實(shí)例化時(shí)必須調(diào)用父類的構(gòu)造器,實(shí)際上有的子類構(gòu)造器
也可以先調(diào)用本類的其他構(gòu)造器褒纲,然后再通過(guò)那個(gè)構(gòu)造器調(diào)用父類的構(gòu)造器
無(wú)論是調(diào)用父類的構(gòu)造器還是子類的構(gòu)造器准夷,最終都是找到最頂級(jí)的父類自
上而下的實(shí)例化。只要中間環(huán)節(jié)有一個(gè)構(gòu)造器沒(méi)找到外厂,這個(gè)子類就無(wú)法完成實(shí)例化
給定以下代碼:
答案:A
Java包的概念
包的概念及應(yīng)用
在Java中,包主要有以下用途 :
包允許將類組合成較小的單元
有助于避免命名沖突
包允許在更廣的范圍內(nèi)保護(hù)類代承、數(shù)據(jù)和方法
包可以是類汁蝶、接口和子包的集合
將類放入包中
package包名 ;
注意:
在java中位于包中的類,在文件系統(tǒng)中的存放位置,必須有與包名層次相對(duì)應(yīng)的目錄結(jié)構(gòu)
package語(yǔ)句作為java源文件的第一條語(yǔ)句
每個(gè)源文件只能聲明一個(gè)包
如果沒(méi)有package語(yǔ)句掖棉,則默認(rèn)為無(wú)名包
Java類庫(kù)中常用的包
java.lang
Java語(yǔ)言包墓律,任何程序中,該包都被自動(dòng)導(dǎo)入幔亥。
java.awt
圖形用戶界面包
java.awt.event
圖形用戶界面事件處理包耻讽。
java.swing
跨平臺(tái)輕量級(jí)組件包。
java.sql
數(shù)據(jù)庫(kù)訪問(wèn)包帕棉。
java.io
這個(gè)包由對(duì)您的輸入/輸出操作有用的類組成针肥。
java.util
該包提供了許多創(chuàng)建如:lists, calendar, date等所需要的類和接口。
java.net
該包提供了許多進(jìn)行TCP/IP網(wǎng)絡(luò)編程的類和接口香伴。
import導(dǎo)入包中的類
包名.路徑名
package? ?test;
class? Cat? ?extends? ?p08.Animal{…}
使用import關(guān)鍵字引入其它包中的類
package? test;
import? ? p08.Animal;
class? Cat? ? extends? ? Animal{…}
位于同一包中的類可以直接訪問(wèn)
導(dǎo)入包中所有的類
import? ? ?包名.*;
導(dǎo)入子包中所有的類
import? ?包名.子包名.*;
導(dǎo)入包中的某個(gè)類
import? ?包名.子包名.類名;
權(quán)限訪問(wèn)操作符
使用訪問(wèn)權(quán)限修飾符對(duì)類的成員進(jìn)行控制慰枕,在java中稱為“封裝”。
不過(guò)不要把封裝理解為private即纲,不要誤認(rèn)為不能訪問(wèn)成員才是封裝具帮。實(shí)際上對(duì)成員訪問(wèn)權(quán)限的任何控制(包括public)都可以稱為封裝機(jī)制。
構(gòu)造器和類的權(quán)限通常為public低斋;private權(quán)限最小蜂厅,限制類外訪問(wèn),一般把屬性設(shè)為private膊畴,讓其他類不能直接訪問(wèn)屬性掘猿,達(dá)到保護(hù)屬性的目的;friendly是默認(rèn)權(quán)限巴比,即不使用權(quán)限修飾符時(shí)术奖,即為friendly,該權(quán)限聲明的成員在類內(nèi)以及在同一個(gè)包中的其他類可以訪問(wèn)轻绞;而protected所修飾的成員在類內(nèi)采记、同一個(gè)包中、所在類的子類中都可以訪問(wèn)政勃。
public > protected > friendly > private
封裝
信息隱藏,隱藏對(duì)象的實(shí)現(xiàn)細(xì)節(jié)唧龄,不讓用戶看到
將東西包裝在一起,然后以新的完整形式呈現(xiàn)出來(lái)
例如奸远,兩種或多種化學(xué)藥品組成一個(gè)膠囊
將方法和屬性一起包裝到一個(gè)單元中既棺,單元以類的形式實(shí)現(xiàn)
“隱藏屬性、方法或?qū)崿F(xiàn)細(xì)節(jié)的過(guò)程稱為封裝懒叛⊥杳幔”
隱藏類的實(shí)現(xiàn)細(xì)節(jié)
讓使用者只能通過(guò)事先定制好的方法來(lái)訪問(wèn)數(shù)據(jù),可以方便地加入控制邏輯薛窥,限制對(duì)屬性的不合理操作
便于修改胖烛,增強(qiáng)代碼的可維護(hù)性
可進(jìn)行數(shù)據(jù)檢查
示例? ? ? Employor.java? ? TestEmployer.java
訪問(wèn)權(quán)限修飾符
用來(lái)控制類的成員和類的使用范圍
類成員的訪問(wèn)權(quán)限修飾符:private眼姐、default、protected佩番、public
類的訪問(wèn)權(quán)限修飾符:public众旗、default
示例:Access.javaTestAccess.java
? 練習(xí)
給定以下代碼:
方法的覆蓋
方法的覆蓋(override)
重寫(xiě)(rewrite)
對(duì)從父類中繼承來(lái)的方法進(jìn)行改造
在子類繼承父類時(shí)發(fā)生
方法覆蓋的規(guī)則
在子類中的覆蓋方法與父類中被覆蓋的方法應(yīng)具有
相同的方法名相同的參數(shù)列表(參數(shù)數(shù)量、參數(shù)類型趟畏、參數(shù)順序都要相同)相同的返回值類型子類覆蓋方法的訪問(wèn)權(quán)限要不小于父類中被覆蓋方法的訪問(wèn)權(quán)限示例Worker.java
?? 練習(xí)
給定下列代碼:
當(dāng)在第6行加入什么方法時(shí)會(huì)引起編譯錯(cuò)誤贡歧?
答案:B
?? 練習(xí)
給定類
class? A{? int? method1(inta,? double? b){return? 0; }
在其子類中
引用數(shù)據(jù)類型的轉(zhuǎn)換
上溯造型
示例:TestStudent.java
向上轉(zhuǎn)型(Upcasting)— 子類轉(zhuǎn)換為父類,自動(dòng)轉(zhuǎn)換赋秀;
前提 — 具有繼承或?qū)崿F(xiàn)關(guān)系
向上轉(zhuǎn)換損失了子類新擴(kuò)展的屬性和方法利朵,僅可以使用從父類中繼承的屬性和方法
下溯造型 示例:TestStudent.java
向下轉(zhuǎn)型(Downcasting):強(qiáng)制轉(zhuǎn)換
instanceof 運(yùn)算符
其實(shí)經(jīng)過(guò)上溯和下溯造型之后,我們很難知道某個(gè)引用到底指向哪種類型的對(duì)象了沃琅。
可以通過(guò)instanceof來(lái)判斷該經(jīng)過(guò)上溯轉(zhuǎn)型后是哪一個(gè)子類的哗咆。
instanceof運(yùn)算符的一般格式:
instanceof 運(yùn)算符
判斷一個(gè)類是否實(shí)現(xiàn)了某個(gè)接口
對(duì)象? ?instanceof? ?接口
判斷一個(gè)實(shí)例對(duì)象是否屬于一個(gè)類
對(duì)象? instanceof? ?類
它的返回值是boolean型的
示例? ? TestStudent.java
多態(tài)
多態(tài)
簡(jiǎn)單來(lái)說(shuō),多態(tài)是具有表現(xiàn)多種形態(tài)的能力的特征
同一個(gè)實(shí)現(xiàn)接口益眉,使用不同的實(shí)例而執(zhí)行不同操作
多態(tài)(動(dòng)態(tài)綁定晌柬、Polymorphism )
不同的對(duì)象對(duì)同一行為作出的不同響應(yīng)
多態(tài)存在的三個(gè)必要條件
要有繼承,或?qū)崿F(xiàn)
要有重寫(xiě)
父類引用指向子類對(duì)象
一旦滿足以上3個(gè)條件郭脂,當(dāng)調(diào)用父類中被重寫(xiě)的方法后年碘,
運(yùn)行時(shí)創(chuàng)建的是哪個(gè)子類的對(duì)象,就調(diào)用該子類中重寫(xiě)的那個(gè)方法
在執(zhí)行期間(而非編譯期間)判斷所引用對(duì)象的實(shí)際類型展鸡,根據(jù)其實(shí)際類型調(diào)用相應(yīng)的方法
多態(tài)的優(yōu)點(diǎn)
簡(jiǎn)化代碼
改善代碼的組織性和可讀性
易于擴(kuò)展
?? 示例? ? Parker.java Vehicle.java? Bus.java? Truck.java? Car.java
在停車場(chǎng)收費(fèi)系統(tǒng)中屿衅,
收費(fèi)者會(huì)根據(jù)車型的不同收取不同的停車費(fèi),其中莹弊,
客車:15元/小時(shí)
貨車:12元/小時(shí)
轎車:8元/小時(shí)
編寫(xiě)java程序完成此功能
static關(guān)鍵字
靜態(tài)變量
所有對(duì)象共享
也稱為類變量
用static修飾的成員變量涤久,它們?cè)陬惐惠d入時(shí)創(chuàng)建,只要類存在忍弛,static變量就存在(參考java虛擬機(jī)視頻)
兩種方式訪問(wèn):
直接訪問(wèn):類名.屬性响迂;
實(shí)例化后訪問(wèn):對(duì)象名.屬性
靜態(tài)方法
不需要實(shí)例化,可以直接訪問(wèn)
也稱為類方法
兩種方式訪問(wèn):
直接訪問(wèn):類名.方法名()
實(shí)例化后訪問(wèn):對(duì)象名.方法名()
static方法的作用
簡(jiǎn)化方法的使用细疚;
便于訪問(wèn)靜態(tài)屬性蔗彤;
注意事項(xiàng)
靜態(tài)方法里只能直接訪問(wèn)靜態(tài)成員,而不能直接訪問(wèn)類中的非
靜態(tài)成員靜態(tài)方法中不能使用this疯兼、super關(guān)鍵字
靜態(tài)方法不能被非靜態(tài)方法覆蓋然遏,靜態(tài)方法不能修飾構(gòu)造器
靜態(tài)代碼塊
一個(gè)類中由static關(guān)鍵字修飾的,不包含在任何方法體中的代碼塊
當(dāng)類被載入時(shí)吧彪,靜態(tài)代碼塊被執(zhí)行待侵,且只被執(zhí)行一次
靜態(tài)塊經(jīng)常用來(lái)進(jìn)行類屬性的初始化
以下代碼的執(zhí)行結(jié)果是_____?
A. 編譯失敗? ?
B. 編譯成功姨裸,輸出“0”
C. 編譯成功秧倾,輸出“1”
D. 編譯成功香拉,輸出“2”
答案:A
?? 練習(xí)
單例模式
單例模式(singleton):保證一個(gè)類僅有一個(gè)實(shí)例,并提供一個(gè)訪問(wèn)它的全局訪問(wèn)點(diǎn)
單例模式要點(diǎn):
某個(gè)類只能有一個(gè)實(shí)例
它必須自行創(chuàng)建這個(gè)示例
必須自行向整個(gè)系統(tǒng)提供這個(gè)實(shí)例
單例模式實(shí)現(xiàn):
擁有一個(gè)私有構(gòu)造器
提供一個(gè)自身靜態(tài)私有的成員變量
提供一個(gè)公有的靜態(tài)公有的方法
final關(guān)鍵字
final關(guān)鍵字
final可以修飾的元素:
類:不能被繼承
變量(屬性和局部變量):不能被重新賦值
在聲明時(shí)賦值中狂,或在構(gòu)造器中賦值系統(tǒng)不會(huì)對(duì)final屬性默認(rèn)的賦初始值
方法:不能在子類中被覆蓋,即不能修改扑毡。
示例? ? ? Final.java? TestFinal.java
在程序中經(jīng)常使用的一些常量胃榕,如圓周率,沒(méi)必要在程序中頻繁的修改它那么我們可以:
首先把它設(shè)置為靜態(tài)static瞄摊,多個(gè)實(shí)例共享該常量勋又,沒(méi)有必要每個(gè)對(duì)象保存一份;
其次换帜,設(shè)置為final類型楔壤,賦值以后不能再改變;
最后注意遵守常量命名規(guī)范惯驼,所有字母大寫(xiě)蹲嚣、單詞之間用下劃線。
練習(xí)
抽象類與final類的區(qū)別祟牲?
final方法是否可以被子類繼承隙畜?
抽象類
抽象類和抽象方法的概念
抽象類是抽象方法和非抽象方法的集合
[訪問(wèn)權(quán)限修飾符]? ? abstract? ? class? ? 類名{? ? ? ? ? ? ? ? ? ? ? ? ? ? ……}
特殊情況
全部是抽象方法
全部為非抽象方法
抽象類和抽象方法的概念
抽象方法
只有方法聲明,沒(méi)有方法實(shí)現(xiàn)的方法
[訪問(wèn)權(quán)限修飾符]? ?abstract? ?返回值類型? ? 抽象方法名 (參數(shù)列表) ;
abstract? ? class? ?A{
abstract? ?int? method1(int? a,int? b);}
抽象類的規(guī)則
注意:
抽象類不能被實(shí)例化说贝;其包含的抽象方法必須在其子類中被實(shí)現(xiàn)议惰,否則該子類只能聲明為abstract;抽象方法不能為static乡恕;
在下列情況下言询,一個(gè)類必須聲明為抽象類:
當(dāng)一個(gè)類的一個(gè)或多個(gè)方法是抽象方法時(shí);
當(dāng)類是一個(gè)抽象類的子類傲宜,并且沒(méi)有實(shí)現(xiàn)父類的所有抽象方法运杭,即只實(shí)現(xiàn)部分;
當(dāng)一個(gè)類實(shí)現(xiàn)一個(gè)接口蛋哭,并且不能為全部抽象方法都提供實(shí)現(xiàn)時(shí)县习;
?? 練習(xí)
給定以下代碼:
接 口(interface)
接口的概念? ? 示例? AudioDevice.java? ? VideoDevice.java
接口中只包含常量和抽象方法,而沒(méi)有變量和方法的實(shí)現(xiàn)
接口對(duì)類來(lái)說(shuō)是一套規(guī)范谆趾,是一套行為協(xié)議躁愿;
接口不是一個(gè)類,不能實(shí)例化
接口的成員:
常量(字段)
抽象方法
注意:
接口不是一個(gè)類沪蓬,沒(méi)有構(gòu)造器彤钟,不能被實(shí)例化
接口使用interface關(guān)鍵字來(lái)定義,而不是class
接口默認(rèn):
常量:public? ?static? ?final
抽象方法:public? ? abstract
?? 練習(xí)
給定以下代碼:
?? 練習(xí)
下列選項(xiàng)中跷叉,哪些可以定義在一個(gè)接口中逸雹?
接口的概念
示例? ? VADevice.java
接口可以實(shí)現(xiàn)多繼承:
用接口可以實(shí)現(xiàn)混合類型(主類型营搅,副類型),java 中可以通過(guò)接口分出主次類型
主類型使用繼承梆砸,副類型转质,使用接口實(shí)現(xiàn)
接口可以使方法的定義和實(shí)現(xiàn)相分離,降低模塊間或系統(tǒng)間的耦合性
針對(duì)接口編程可以屏蔽不同實(shí)現(xiàn)間的差異帖世,看到的只是實(shí)現(xiàn)好的功能休蟹。
接口和類的關(guān)系
類實(shí)現(xiàn)接口 — implements
為了使用一個(gè)接口,你要編寫(xiě)實(shí)現(xiàn)接口的類
如果一個(gè)類要實(shí)現(xiàn)一個(gè)接口日矫,那么這個(gè)類就必須實(shí)現(xiàn)接口中所有抽象方法赂弓。否則這個(gè)類只能聲明為抽象類
多個(gè)無(wú)關(guān)的類可以實(shí)現(xiàn)一個(gè)接口,一個(gè)類可以實(shí)現(xiàn)多個(gè)無(wú)關(guān)的接口
一個(gè)類可以在繼承一個(gè)父類的同時(shí)哪轿,實(shí)現(xiàn)一個(gè)或多個(gè)接口
示例 Television.java
接口和類的關(guān)系
?? 示例? ? Student.java? ? Consumer.java? ? Person.java
有一個(gè)Student類該類繼承了Person類盈魁,并實(shí)現(xiàn)了Consumer接口該類具有String類型的屬性school并有一個(gè)study方法,在該方法中窃诉,系統(tǒng)可打印出學(xué)生在那所學(xué)校學(xué)習(xí)并創(chuàng)建一個(gè)測(cè)試方法杨耙,測(cè)試Student類
接口與抽象類的對(duì)比
接口不能含有任何非抽象方法,而抽象類可以飘痛。
類可以實(shí)現(xiàn)多個(gè)接口按脚,但只能有一個(gè)父類。
接口和接口之間可以多繼承
抽象類可以理解為抽象方法和非抽象方法的混合體敦冬,而接口中的方法完全是抽象方法辅搬,是一套純粹的規(guī)范。一般來(lái)說(shuō)脖旱,有關(guān)系的類才能繼承同一個(gè)抽象類堪遂,而無(wú)關(guān)的類不可能有同一個(gè)抽象父類,但是無(wú)關(guān)的類可以實(shí)現(xiàn)同一個(gè)接口萌庆。
內(nèi)部類
內(nèi)部類特性
內(nèi)部類就是定義在另一個(gè)類內(nèi)部的類溶褪。
內(nèi)部類對(duì)于同一包中的其它類來(lái)說(shuō),內(nèi)部類能夠隱藏起來(lái)践险。
注意
內(nèi)部類可以訪問(wèn)其外部類中所有的屬性和方法
無(wú)需創(chuàng)建外部類的對(duì)象猿妈,即可從內(nèi)部類訪問(wèn)外部類的變量和方法。
必須創(chuàng)建內(nèi)部類的對(duì)象巍虫,否則無(wú)法從外部類訪問(wèn)內(nèi)部類的變量和方法彭则。
如果內(nèi)部類中有和外部類同名的變量或方法,則內(nèi)部類的變量和方法將獲得比外部類的變量和方法更高的優(yōu)先級(jí)占遥。
不能定義static變量
內(nèi)部類特性
示例Outer.java
一個(gè)類只會(huì)被這個(gè)類所調(diào)用俯抖,其他類不會(huì)使用他,你可以把它定義成一內(nèi)部類瓦胎,這樣可以隱藏實(shí)現(xiàn)細(xì)節(jié)芬萍,避免錯(cuò)誤的調(diào)用尤揣。
內(nèi)部類特性
普通類的訪問(wèn)權(quán)限修飾符
default
public
內(nèi)部類的訪問(wèn)權(quán)限修飾符
default
public
protected
private
示例? Outer3.java? ? OuterTest.java
在Outer內(nèi)訪問(wèn)Inner,只需如下:
Inner? ?in=new? ?Inner() ;
在Outer外訪問(wèn)Inner,必須如下:
Outer o =new Outer();//實(shí)例化外部類Outer.Inner oi = o.new? Inner();//實(shí)例化內(nèi)部類
靜態(tài)內(nèi)部類
用static標(biāo)識(shí)的內(nèi)部類為靜態(tài)內(nèi)部類。
靜態(tài)內(nèi)部類作為外部類的靜態(tài)成員柬祠,不能訪問(wèn)外部類非靜態(tài)成員北戏。
非靜態(tài)內(nèi)部類只能定義非靜態(tài)成員,而靜態(tài)內(nèi)部類可以定義靜態(tài)成員和非靜態(tài)成員漫蛔。
使用Outer.Inner inn=new Outer.Inner()方式實(shí)例化靜態(tài)內(nèi)部類最欠。
非靜態(tài)內(nèi)部類不可以使用上面的方式實(shí)例化。
示例:OuterStatic.java
局部?jī)?nèi)部類
在一個(gè)類的方法體中或程序塊內(nèi)定義的內(nèi)部類
示例
在方法定義的內(nèi)部類中只能訪問(wèn)方法中的final類型的局部變量
本章重點(diǎn)總結(jié)
類的繼承Java中的包和訪問(wèn)修飾符方法的覆蓋引用數(shù)據(jù)類型的轉(zhuǎn)換多態(tài)static關(guān)鍵字抽象類和接口final關(guān)鍵字
課后作業(yè)
創(chuàng)建一個(gè)球員類惩猫,并且該類最多只允許創(chuàng)建十一個(gè)對(duì)象。提示利用 static 和 封裝性來(lái)完成蚜点。? [必做題]
類圖如下:
效果如下:
設(shè)計(jì)2個(gè)類轧房,要求如下:(知識(shí)點(diǎn):類的繼承 方法的覆蓋) [必做題]
2.1? 定義一個(gè)汽車類Vehicle,
2.1.1 屬性包括:汽車品牌brand(String類型)绍绘、顏色color(String類型)和速度speed(double類型)奶镶。
2.1.2 至少提供一個(gè)有參的構(gòu)造方法(要求品牌和顏色可以初始化為任意值,但速度的初始值必須為0)陪拘。
2.1.3 為屬性提供訪問(wèn)器方法厂镇。注意:汽車品牌一旦初始化之后不能修改。
2.1.4 定義一個(gè)一般方法run()左刽,用打印語(yǔ)句描述汽車奔跑的功能
2.1.5 在main方法中創(chuàng)建一個(gè)品牌為“benz”捺信、顏色為“black”的汽車。
2.2 定義一個(gè)Vehicle類的子類轎車類Car欠痴,要求如下:
2.2.1 轎車有自己的屬性載人數(shù)loader(int 類型)迄靠。
2.2.2 提供該類初始化屬性的構(gòu)造方法。
2.2.3 重新定義run()喇辽,用打印語(yǔ)句描述轎車奔跑的功能掌挚。
2.2.4 在main方法中創(chuàng)建一個(gè)品牌為“Honda”、顏色為“red”菩咨,載人數(shù)為2人的轎車吠式。
設(shè)計(jì)三個(gè)類,分別如下:(知識(shí)點(diǎn):抽象類及抽象方法) [必做題]
3.1 設(shè)計(jì)Shape表示圖形類抽米,有面積屬性area特占、周長(zhǎng)屬性per,顏色屬性color云茸,有兩個(gè)構(gòu)造方法(一個(gè)是默認(rèn)的摩钙、一個(gè)是為顏色賦值的),還有3個(gè)抽象方法查辩,分別是:getArea計(jì)算面積胖笛、getPer計(jì)算周長(zhǎng)网持、showAll輸出所有信息,還有一個(gè)求顏色的方法getColor长踊。
3.2 設(shè)計(jì) 2個(gè)子類:
3.2.1? Rectangle表示矩形類功舀,增加兩個(gè)屬性,Width表示長(zhǎng)度身弊、height表示寬度辟汰,重寫(xiě)getPer、getArea和showAll三個(gè)方法阱佛,另外又增加一個(gè)構(gòu)造方法(一個(gè)是默認(rèn)的帖汞、一個(gè)是為高度、寬度凑术、顏色賦值的)翩蘸。
3.2.2? Circle表示圓類,增加1個(gè)屬性淮逊,radius表示半徑催首,重寫(xiě)getPer、getArea和showAll三個(gè)方法泄鹏,另外又增加兩個(gè)構(gòu)造方法(為半徑郎任、顏色賦值的)。
3.3? 在main方法中备籽,聲明創(chuàng)建每個(gè)子類的對(duì)象舶治,并調(diào)用2個(gè)子類的showAll方法。
Cola公司的雇員分為以下若干類:(知識(shí)點(diǎn):多態(tài)) [必做題]
4.1? ColaEmployee :這是所有員工總的父類车猬,屬性:?jiǎn)T工的姓名,員工的生日月份歼疮。方法:getSalary(int month) 根據(jù)參數(shù)月份來(lái)確定工資,如果該月員工過(guò)生日诈唬,則公司會(huì)額外獎(jiǎng)勵(lì)100 元韩脏。
4.2? SalariedEmployee : ColaEmployee 的子類,拿固定工資的員工铸磅。屬性:月薪
4.3? HourlyEmployee :ColaEmployee 的子類赡矢,按小時(shí)拿工資的員工,每月工作超出160 小時(shí)的部分按照1.5 倍工資發(fā)放阅仔。屬性:每小時(shí)的工資吹散、每月工作的小時(shí)數(shù)
4.4? SalesEmployee :ColaEmployee 的子類,銷售人員八酒,工資由月銷售額和提成率決定空民。屬性:月銷售額、提成率
4.5? 定義一個(gè)類Company,在該類中寫(xiě)一個(gè)方法界轩,調(diào)用該方法可以打印出某月某個(gè)員工的工資數(shù)額画饥,寫(xiě)一個(gè)測(cè)試類TestCompany,在main方法,把若干各種類型的員工放在一個(gè)ColaEmployee 數(shù)組里浊猾,并單元出數(shù)組中每個(gè)員工當(dāng)月的工資抖甘。
利用接口實(shí)現(xiàn)動(dòng)態(tài)的創(chuàng)建對(duì)象[選做題]
5.1? 創(chuàng)建4個(gè)類:
蘋(píng)果
香蕉
葡萄
園丁
5.2? 在三種水果的構(gòu)造方法中打印一句話.
以蘋(píng)果類為例
class apple
{
public apple()
{
System.out.println(“創(chuàng)建了一個(gè)蘋(píng)果類的對(duì)象”);
}
}
類圖如下:
5.3 要求從控制臺(tái)輸入一個(gè)字符串,根據(jù)字符串的值來(lái)判斷創(chuàng)建三種水果中哪個(gè)類的對(duì)象
如圖:
編寫(xiě)三個(gè)系別的學(xué)生類:英語(yǔ)系葫慎,計(jì)算機(jī)系衔彻,文學(xué)系(要求通過(guò)繼承學(xué)生類) [選做題]
6.1各系有以下成績(jī):
英語(yǔ)系:? 演講,期末考試偷办,期中考試艰额;
計(jì)算機(jī)系:操作能力,英語(yǔ)寫(xiě)作椒涯,期中考試柄沮,期末考試;
文學(xué)系:? 演講逐工,作品,期末考試漂辐,期中考試;
6.2各系總分評(píng)測(cè)標(biāo)準(zhǔn):
英語(yǔ)系:? ? 演講 50%
期末考試 25%
期中考試 25%
計(jì)算機(jī)系:? 操作能力? 40%
英語(yǔ)寫(xiě)作? 20%
期末考試? 20%
期中考試? 20%
文學(xué)系:? 演講? 35%
作品? 35%
期末考試? 15%
期中考試? 15%
6.3定義一個(gè)可容納5個(gè)學(xué)生的學(xué)生類數(shù)組泪喊,使用隨機(jī)數(shù)給該數(shù)組裝入各系學(xué)生的對(duì)象,然后按如下格式輸出數(shù)組中的信息:
學(xué)號(hào):XXXXXXXX 姓名:XXX 性別:X 年齡:XX 綜合成績(jī):XX