《第六章--構(gòu)造方法》由會(huì)員分享,可在線閱讀,更多相關(guān)《第六章--構(gòu)造方法(27頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第六章 構(gòu)造方法及封裝本講內(nèi)容 包的概念和使用 this關(guān)鍵字 構(gòu)造方法及方法重載 封裝的實(shí)現(xiàn)及訪問控制權(quán)限本章目標(biāo) 掌握構(gòu)造方法 掌握方法重載 掌握this關(guān)鍵字的用法。 掌握封裝的實(shí)現(xiàn)及成員的訪問控制為什么需要包 生活案例 文檔分門別類,易于查找文檔分門別類,易于查找 不同內(nèi)容的文檔可以放在不同的不同內(nèi)容的文檔可以放在不同的 袋子中,擁有相同的名字,避免沖突袋子中,擁有相同的名字,避免沖突 易于管理易于管理 包 包解決類的同名問題允許類組成較小的單元(類似允許類組成較小的單元(類似文件夾),易于找到和使用相文件夾),易于找到和使用相應(yīng)的文件應(yīng)的文件 防止命名沖突防止命名沖突 更好的保護(hù)類、
2、屬更好的保護(hù)類、屬性和方法性和方法 A.java包包如何創(chuàng)建包package com.my.classandobject; /聲明包public class School / public String toString() / 包名包名 使用使用package聲明包,聲明包,以分號(hào)結(jié)尾以分號(hào)結(jié)尾如果有包的聲明,一定如果有包的聲明,一定作為作為Java源代碼的第一條源代碼的第一條語句語句 包命名規(guī)范 包名由小寫字母組成,不能以圓點(diǎn)開頭或結(jié)尾 包名之前最好加上唯一的前綴,通常使用組織倒置的網(wǎng)絡(luò)域名。如:域名 包名后續(xù)部分依不同機(jī)構(gòu)內(nèi)部的規(guī)范不同而不同 package mypackage;pack
3、age net.javagroup.mypackage;package net.javagroup.research.powerproject; 部門名部門名 項(xiàng)目名項(xiàng)目名 package .mypackage; 如何導(dǎo)入包 為了使用不在同一包中的類,需要在Java程序中使用import關(guān)鍵字導(dǎo)入這個(gè)類import java.util.*; /導(dǎo)入導(dǎo)入java.util包中所有類包中所有類import com.my.classandobject. School; /導(dǎo)入指定包中指定類導(dǎo)入指定包中指定類 關(guān)鍵字關(guān)鍵字import并不陌生并不陌生 import 包名包名. 類名;類名;1、系統(tǒng)包:
4、、系統(tǒng)包:java.util2、自定義包:、自定義包:cn.jbit.classandobject*: 指包中的所有類指包中的所有類AccpSchool :指包中的:指包中的AccpSchool類類小結(jié) School.java位于com.my.classandobject包中,HelloTest.java位于demo包中,下面程序空缺部分需要填入代碼嗎?如果需要,是什么? /添加代碼添加代碼2/添加代碼添加代碼3public class HelloTest public static void main(String args)School center = new School(); cen
5、ter.showMessage(); /添加代碼添加代碼1public class School public void showMessage() System.out.println(“這是豐這是豐澤培訓(xùn)中心。澤培訓(xùn)中心。); package com.my.classandobject;package demo; import com.my.classandobject.*;聲明包的含義:聲明包的含義:聲明當(dāng)前類所處的位置聲明當(dāng)前類所處的位置導(dǎo)入包的含義:導(dǎo)入包的含義:聲明在當(dāng)前類中要使用到的聲明在當(dāng)前類中要使用到的別的類所處的位置別的類所處的位置用面向?qū)ο竺枋鍪澜鐝默F(xiàn)實(shí)中抽象出類分三步:
6、 1. 找出它的種類 2. 找出它的屬性 3. 找出它的行為第一步:發(fā)現(xiàn)類 根據(jù)根據(jù)“對(duì)象對(duì)象”抽象出抽象出“類類” class Dog 名詞名詞 各個(gè)狗對(duì)象各個(gè)狗對(duì)象 用面向?qū)ο竺枋鍪澜绲诙剑喊l(fā)現(xiàn)類的屬性 狗類共有的狗類共有的特征特征: 1. 品種品種2. 年齡年齡3. 昵稱昵稱4. 健康情況健康情況5. 跟主人的親密度跟主人的親密度 class Dog String name = 旺財(cái)旺財(cái); / 昵稱昵稱 int health = 100; / 健康值健康值 int love = 0; / 親密度親密度 String strain = 拉布拉多犬拉布拉多犬; / 品種品種 只放我關(guān)心只放
7、我關(guān)心的屬性的屬性名詞名詞用面向?qū)ο竺枋鍪澜绲谌剑喊l(fā)現(xiàn)類的方法 狗類共有的狗類共有的行為行為: 1. 跑跑2. 吠吠3. 輸出狗的信息輸出狗的信息 動(dòng)詞動(dòng)詞class Dog String name = 旺財(cái)旺財(cái); / 昵稱昵稱 int health = 100; / 健康值健康值 int love = 0; / 親密度親密度 String strain = 拉布拉多犬拉布拉多犬; ; / 品種品種 /* 輸出狗的信息輸出狗的信息 */ public void print() / 輸出狗信息的代碼輸出狗信息的代碼 只放我關(guān)心只放我關(guān)心的方法的方法用面向?qū)ο竺枋鍪澜珙悎D及畫法使用類圖描述類用于
8、分析和設(shè)計(jì)“類”直觀、容易理解+ name:String+ health:int+ love:int+ strain:StringDog+ print( ) : void“+”:public“-”:private類名類名返回值返回值類型類型類型類型屬性名屬性名參數(shù):參數(shù):名字名字:類型類型,名字名字: :類型類型方法名方法名構(gòu)造方法 構(gòu)造方法public 構(gòu)造方法名構(gòu)造方法名( ) /初始化代碼初始化代碼與類名相同與類名相同沒有返回值沒有返回值類型類型public Penguin() name = qq; love = 20; sex = Q仔仔; System.out.println(執(zhí)行構(gòu)
9、造方法執(zhí)行構(gòu)造方法);可以指定可以指定參數(shù)參數(shù) 構(gòu)造方法構(gòu)造方法定義:一個(gè)在創(chuàng)建對(duì)象時(shí)被自動(dòng)調(diào)用的特殊方法。構(gòu)造方法作用:為對(duì)象進(jìn)行初始化(成員變量)工作。方法重載方法重載,指同一個(gè)類中多個(gè)方法:方法名相同參數(shù)列表不同與返回值、訪問修飾符無關(guān)與返回值、訪問修飾符無關(guān) public Penguin() /代碼代碼 public Penguin(String name, int health, int love, String sex) /代碼代碼 示例示例2 System.out.println(45);System.out.println(true);System.out.println(狗在
10、玩耍!狗在玩耍!); 示例示例1 this關(guān)鍵字1、對(duì)字段使用this 最經(jīng)常使用this關(guān)鍵字的情況,是在對(duì)象的一個(gè)字段被方法或構(gòu)造器的參數(shù)屏蔽時(shí),需要調(diào)用這個(gè)被屏蔽的字段的這種情況。如: this關(guān)鍵字2、對(duì)構(gòu)造器使用this 在一個(gè)構(gòu)造器中,還可以使用this關(guān)鍵字來調(diào)用同一個(gè)類中的另外的構(gòu)造器。這種做法稱之為“顯式構(gòu)造器調(diào)用”。如: 封裝一 含義1:把屬性和行為封裝在類中,把對(duì)象的全部屬性和全部行為結(jié)合在一起,形成一個(gè)不可分割的獨(dú)立單位(即對(duì)象)。 class Person String name; int age; public void eat() System.out.print
11、ln(“eat with mouth.”); public void shout () System.out.println(“my age is ”+age); 封裝二 含義2:信息隱蔽,即盡可能隱蔽對(duì)象的內(nèi)部細(xì)節(jié),對(duì)外形成一個(gè)邊界或者說形成一道屏障,只保留有限的對(duì)外接口使之與外部發(fā)生聯(lián)系。把成員變量聲明為private,提供public的方法對(duì)其進(jìn)行訪問或修改,隱藏類的實(shí)現(xiàn)細(xì)節(jié)。class Person private String name; private int age; public void setName(String name)this.name=name;public St
12、ring getName()return name; 封裝的好處 封裝的好處隱藏類的隱藏類的實(shí)現(xiàn)細(xì)節(jié)實(shí)現(xiàn)細(xì)節(jié)只能通過規(guī)只能通過規(guī)定方法訪問定方法訪問數(shù)據(jù)數(shù)據(jù)方便加入控方便加入控制語句制語句方便修改實(shí)現(xiàn)方便修改實(shí)現(xiàn) 修改屬性的可見性修改屬性的可見性 在在getter/setter方法中方法中加入屬性控制語句加入屬性控制語句 創(chuàng)建創(chuàng)建getter/setter方法方法 class Dog private String name = 旺財(cái)旺財(cái); / 昵稱昵稱 private int health = 100; / 健康值健康值 private int love = 0; / 親密度親密度 priva
13、te String strain = 拉布拉多犬拉布拉多犬; / 品種品種 public int getHealth() return health; public void setHealth (int health) if (health 100 | health 0) this.health = 40; System.out.println(健康值應(yīng)該在健康值應(yīng)該在0和和100之間,默認(rèn)值是之間,默認(rèn)值是40); else this.health = health; / 其它其它getter/setter方法方法封裝的實(shí)現(xiàn)封裝的步驟設(shè)為設(shè)為private用于屬性用于屬性的讀寫的讀寫 對(duì)屬
14、性值的對(duì)屬性值的合法性合法性進(jìn)行進(jìn)行判斷判斷 this代表代表當(dāng)前對(duì)象當(dāng)前對(duì)象 1 1 2 2 2 2 3 3 - name:String- health:int- love:int- strain:StringDog+ print():void+ setHealth():void+ getHealth():String 控制類成員的訪問 訪問級(jí)別修飾符用來決定其他類是否能訪問一個(gè)特定的字段或調(diào)用一個(gè)特定的方法。有兩種級(jí)別的訪問控制: 最高級(jí)別:public,或包級(jí)私有(package-private,沒有指定修飾符),用于修飾類。 成員級(jí)別:public、private、protected,
15、或者包級(jí)私有(package-private,沒有指定修飾符),用于修飾類中的成員。 訪問級(jí)別修飾符類內(nèi)部同包內(nèi)子類全部public是是是是protected是是是否無修飾符是是否否private是否否否總結(jié)你學(xué)到了嗎? this關(guān)鍵字的用法 構(gòu)造方法及方法重載 封裝的實(shí)現(xiàn)及訪問權(quán)限控制上機(jī)練習(xí) 1、創(chuàng)建一個(gè)商品類(product),商品有名稱,編號(hào),單價(jià)等屬性,使用封裝的概念封裝成員變量,創(chuàng)建一個(gè)測(cè)試類(Test)生成具體商品。 2、定義一個(gè)學(xué)生類(Student),有姓名、年齡、性別、專業(yè)四個(gè)屬性,使用封裝的概念封裝成員變量(setter、getter方法),使用方法重載增加兩個(gè)構(gòu)造方法,
16、分別實(shí)現(xiàn): A、僅給姓名和年齡傳參賦值,其他兩個(gè)屬性取默認(rèn)值 B、給所有屬性傳參賦值以上所有給年齡賦值的方法(包括setter方法及構(gòu)造方法)中增加年齡限制約束(要求年齡不小于18歲,否則給出提示并取默認(rèn)值為18)上機(jī)練習(xí) 3、分析需求,用封裝方式設(shè)計(jì)類,畫出類圖 汽車銷售人員銷售汽車,可售款式有凱越、君威 每款汽車有款式和編號(hào),款式、編號(hào)不能修改 汽車銷售人員有姓名,姓名不能修改 銷售人員有兩種銷售方式: 按車輛銷售,每次一輛 按車型銷售(凱越),要同時(shí)告訴銷售人員購買數(shù)量- type:String- id:StringExcelle+ Excelle(id:String,type:String)+ getType():String+ getId():String- type:String- id:StringRegal+ Regal(id:String,type:String)+ getType():String+ getId():String- name:StringSeller+ getName():String+ setName(name:String):void+ sell(car:Excelle):void+ sell(car:Regal):void+ sell(car:Excelle,num:int):void 凱越凱越 君威君威 銷售員銷售員