




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java的面向?qū)ο缶幊屉娮涌萍即髮W(xué)目標(biāo)難點(diǎn)重點(diǎn)【課前思考】什么是對(duì)象?什么是類?什么是包?什么是接口?什么是內(nèi)部類?面向?qū)ο缶幊痰奶匦杂心娜齻€(gè)?它們各自又有哪些特性?你知道java語(yǔ)言在面向?qū)ο缶幊谭矫嬗泻为?dú)特的特點(diǎn)嗎?【學(xué)習(xí)目標(biāo)】本講主要講述了java語(yǔ)言的面向?qū)ο蠹夹g(shù),包括面向?qū)ο蟮幕靖拍?、面向?qū)ο蟮某绦蛟O(shè)計(jì)方法及java中的類、包、對(duì)象、抽象類、接口和面向?qū)ο蟮奶匦?。通過(guò)本講的學(xué)習(xí),同學(xué)們可以使用面向?qū)ο蠹夹g(shù)編寫(xiě)java程序?!緦W(xué)習(xí)指南】應(yīng)深刻理解各知識(shí)點(diǎn)的概念,使用上一講的編程基礎(chǔ)知識(shí)及面向?qū)ο蠹夹g(shù),編寫(xiě)簡(jiǎn)單的java類,由淺至深,養(yǎng)成風(fēng)格良好的編程習(xí)慣?!倦y重點(diǎn)】重點(diǎn):仔細(xì)體會(huì)面向?qū)ο缶幊痰乃枷?,熟練理解類和?duì)象的概念,理解面向?qū)ο蟮奶匦?,?huì)編寫(xiě)簡(jiǎn)單的類,逐漸掌握面向?qū)ο缶幊痰姆椒āW⒁鈐ava語(yǔ)言中,不允許多重繼承,以及類變量和類方法的使用。難點(diǎn):理解方法重載和方法重寫(xiě),不要混淆了兩者的使用。類變量和類方法的使用。接口的使用。Java的面向?qū)ο筇匦杂嘘P(guān)面向?qū)ο蟮母拍頙ava的類Java的對(duì)象Java的面向?qū)ο筇匦猿橄箢惡徒涌贗nner
Class面向?qū)ο蟮母拍蠲嫦驅(qū)ο蟪绦蛟O(shè)計(jì)圍繞的幾個(gè)主要概念:抽象數(shù)據(jù)類型、類、類型層次(子類),封裝性,繼承性、多態(tài)性對(duì)象,消息和方法面向?qū)ο蟮母拍?抽象數(shù)據(jù)類型class
Car
{int
color_number;int
door_number;int
speed;void
brake()
{
…
}void
speedUp()
{…};void
slowDown()
{
…
}}計(jì)算機(jī)中的對(duì)象的原型現(xiàn)實(shí)生活中的對(duì)象抽象數(shù)據(jù)類型類什么是類?類是描述對(duì)象的“基本原型”,它定義一種對(duì)象所能擁有的數(shù)據(jù)和能完成的操作,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類是程序的基本單元。程序中的對(duì)象是類的一個(gè)實(shí)例,是一個(gè)軟件單元,它va由ria一ble組s結(jié)構(gòu)化的數(shù)據(jù)和在其上的一組操作構(gòu)成。methods變量,方法,消息變量:即指對(duì)象的所知道的狀態(tài)方法:指對(duì)象的功能單元。什么是消息?軟件對(duì)象通過(guò)相互間傳遞消息來(lái)相互作用和通信一個(gè)消息由三部分組成:1.
接受消息的對(duì)象2.
要完成方法的名字3.
方法需要的參數(shù)對(duì)象B對(duì)象Amessage例子一個(gè)例子在程序中操作對(duì)象是類的一個(gè)實(shí)例:即對(duì)象創(chuàng)建一個(gè)對(duì)象Hello
obj=new
Hello();調(diào)用方法obj.showString(“Hello
World!”)class
Hello{}private
String
s;public
void
showString
(){
System.out.println(s);}public
void
changeString(Stringstr){
s=str; return
s;}封裝什么是封裝?封裝把對(duì)象的所有組成部分組合在一起,封裝定義程序如何引用對(duì)象的數(shù)據(jù),封裝私有數(shù)據(jù)方法方法數(shù)據(jù)對(duì)象A對(duì)象B公有數(shù)據(jù)實(shí)際上使用方法將類的數(shù)據(jù)隱藏起來(lái),控制用戶對(duì)類的修改和訪問(wèn)數(shù)據(jù)的程度。子類什么是子類?子類是作為另一個(gè)類的擴(kuò)充或修正所定義的一個(gè)類.bicycle(super
class)sub
classMountain
bikesRacing
bikesTandem
bikes繼承什么是繼承?繼承是子類利用父類中定義的方法和變量就像它們屬于子類本身一樣.class
Car{ int
color_number;int
door_number;int
speed;push_break()
{
…
}add_oil()
{
…
}}classTrash_Carextends
Car{ double
amount;fill_trash()
{
…
}}何時(shí)選擇繼承性一個(gè)很好的經(jīng)驗(yàn):“B是一個(gè)A嗎?”如果是則讓B做A的子類.常犯的錯(cuò)誤A有一個(gè)B嗎?例如讓汽車(chē)輪子成為汽車(chē)的子類是錯(cuò)誤的方法重寫(xiě)(overridden)什么是方法的覆蓋(重寫(xiě))?在子類中重新定義父類中已有的方法。class
Car{ int
color_number;int
door_number;int
speed;push_break(){
speed=0;
}add_oil()
{
…
}}classTrash_Carextends
Car{ double
amount;fill_trash()
{
…
}push_break(){ speed=speed-10;
}}多態(tài)性(polymorphic)什么是方法的重載(多態(tài)性)?在同一個(gè)類中至少有兩個(gè)方法用同一個(gè)名字,但有不同的參數(shù)。類void show(int
int_num)void
show(double
double_num)void show(nit
nit_
um,
float
float_um)1231.23123,1.23Java
類定義包括類聲明和類體類聲明:[public][abstract|final]
classclassName
[extends
superclassName][implements
interfaceNameList]{……}Java類體類體定義如下:class
className{ [public
|
protected
|
private
]
[static][final] [transient]
[volatile]
typevariableName;
//成員變量[public
|
protected
|
private
]
[static][final
|
abstract]
[native]
[synchronized]returnType
methodName([paramList])[throws
exceptionList]{statements}
//成員方法}成員變量[public
|
protected
|
private][static][final][transient][volatile]typevariableName;//成員變量static:
靜態(tài)變量(類變量〕;相對(duì)于實(shí)例變量final:
常量transient:
暫時(shí)性變量,用于對(duì)象存檔(序列化)volatile:
貢獻(xiàn)變量,用于并發(fā)線程的共享成員方法[public|protected|private][static][final
|
abstract][native]
[synchronized]returnType
methodName([paramList])[throws
exceptionList]{statements}//方法聲明//方法體方法聲明static:
類方法,可通過(guò)類名直接調(diào)用abstract:
抽象方法,沒(méi)有方法體final:native:方法不能被重寫(xiě)集成其它語(yǔ)言的代碼synchronized:
控制多個(gè)并發(fā)線程的訪問(wèn)成員方法(值參傳遞)參數(shù)的值參傳遞o.io.jmain
othisithis…Outer類對(duì)象棧內(nèi)存堆內(nèi)存Inner類對(duì)象Outer.this方法重載(Method
Overloading)方法重載指多個(gè)方法享有相同的方法名區(qū)別在于:參數(shù)類型不同,或個(gè)數(shù)不同;返回類型不能用來(lái)區(qū)分重載的方法。例class
MethodOverloading{void
receive(int
i)
{……}void
receive(int
x,
int
y)
{……}void receive(double
d){……}void receive(String
s)
{……}}構(gòu)造方法重載經(jīng)常用于構(gòu)造方法構(gòu)造方法具有和類名相同的名稱,而且不返回任何數(shù)據(jù)類型構(gòu)造方法只能由new運(yùn)算符調(diào)用利用構(gòu)造方法進(jìn)行初始化構(gòu)造方法不能被繼承例class
Point{ int
x,y; Point(){x=0;
y=0;}Point(int
x,
int
y){this.x=x;this.y=y;}}finalize()方法在根類java.land.Object中實(shí)現(xiàn)對(duì)對(duì)象進(jìn)行垃圾收集前,系統(tǒng)自動(dòng)調(diào)用自己重寫(xiě)時(shí)需要調(diào)用父類的finalize()方法,protected
void
finalize()
throws
throwable{……
//clean
up
code
for
this
classsuper.finalize();}Java對(duì)象類實(shí)例化可生成對(duì)象對(duì)象通過(guò)消息傳遞來(lái)進(jìn)行交互消息傳遞即激活指定的某個(gè)對(duì)象的方法以改變其狀態(tài)或讓它產(chǎn)生一定的行為。public
class
HelloWorldApp{public
static
void
main(String
args[]){System.out.println(“hello”);}}對(duì)象的生命周期生成使用清除對(duì)象的生成包括聲明、實(shí)例化和初始化格式:type
objectName=new
type([paramlist]);聲明:type
objectName聲明并不為對(duì)象分配內(nèi)存空間,而只是分配一個(gè)引用空間;實(shí)例化:運(yùn)算符new為對(duì)象分配內(nèi)存空間,它調(diào)用對(duì)象的構(gòu)造方法,返回引用;一個(gè)類的不同對(duì)象分別占據(jù)不同的內(nèi)存空間。對(duì)象的生成(3)生成:執(zhí)行構(gòu)造方法,進(jìn)行初始化;根據(jù)參數(shù)不同調(diào)用相應(yīng)的構(gòu)造方法。對(duì)象的引用指向一個(gè)中間的數(shù)據(jù)結(jié)構(gòu),它存儲(chǔ)有關(guān)數(shù)據(jù)類型的信息以及當(dāng)前對(duì)象所在的堆的地址,而對(duì)于對(duì)象所在的實(shí)際的內(nèi)存地址是不可操作的,這就保證了安全性。對(duì)象的使用通過(guò)運(yùn)算符“.”可以實(shí)現(xiàn)對(duì)變量的訪問(wèn)和方法的調(diào)用。設(shè)定訪問(wèn)權(quán)限來(lái)限制其它對(duì)象對(duì)它的訪問(wèn)調(diào)用對(duì)象的變量格式:objectReference.variableobjectReference是一個(gè)已生成的對(duì)象,也可以是能生成對(duì)象的表達(dá)式例:p.x=10;tx=new
Point(
).x;調(diào)用對(duì)象的方法格式:objectReference.methodName([paramlist]);例如:p.move(30,20);new
Point(
).move(30,20);使用方法的返回值if(p.equal(20,30))
{…
//statements
when
equal}
else…
//statements
when
unequal}對(duì)象的清除當(dāng)不存在對(duì)一個(gè)對(duì)象的引用時(shí),該對(duì)象成為一個(gè)無(wú)用對(duì)象。對(duì)象的引用=null。System.gc();執(zhí)行后有什么影響:suggests
that
the
Java
VirtualMachineexpend
effort
towardrecycling
unused
objects
inorder
to
make
the
memory
they
currently
occupy
available
for
quickreuse.面向?qū)ο筇匦苑庋b性繼承性多態(tài)性封裝性類定義:class
className{
[public
|
protected
|
private
]
[static][final]
[transient]
[volatile]
typevariableName;
//成員變量[public
|
protected
|
private
]
[static][final
|
abstract]
[native]
[synchronized]returnType
methodName([paramList])[throws
exceptionList]{statements}
//成員方法}封裝性-類的修飾每個(gè)類都創(chuàng)造了有自己的名字空間,指方法和變量可以知道彼此的存在,可以使用。abstract類不能直接產(chǎn)生屬于這個(gè)類的對(duì)象final類不能被其他任何類所繼承(安全的考慮)public類不但可以被同一程序包中的其它類使用,別的程序包中的類也可以使用.缺?。侯愔荒鼙槐景械钠渌愂褂妙惽懊娴脑L問(wèn)修飾字是:public或者“無(wú)”封裝性-java訪問(wèn)控制變量和方法的修飾字public、protected、privatepublic:任何其它類、對(duì)象只要可以看到這個(gè)類的話,那么它就可以存取變量的數(shù)據(jù),或使用方法。class
ABC{
public
int
pub_i=5;public
void
show
(){
System.out.println(“pub_i”+pub_i);}封裝性-例子class
Demo{
public
static
void
main(String
args[]){ ABC
abc=new
ABC();System.out.println(“abc.pub_i”+abc.pub_i);abc.pub_i=10;abc.show();}}封裝性-修飾符與訪問(wèn)控制同一個(gè)類同一個(gè)包不同包的子類不同包非子類private√default√√protected√√√public√√√√繼承性通過(guò)繼承實(shí)現(xiàn)代碼復(fù)用根類:java.lang.Object父類包括直接或者間接被繼承的類Java不支持多重繼承子類不能訪問(wèn)父類中訪問(wèn)權(quán)限為private的成員變量和方法。子類可以重寫(xiě)父類的方法,及命名與父類同名的成員變量創(chuàng)建子類格式:class
SubClass
extends
SuperClass
{…}繼承性舉例繼承性舉例繼承性舉例繼承性舉例重寫(xiě)(overridden)子類中重寫(xiě)的方法和父類中被重寫(xiě)的方法要具有相同的名字,相同的參數(shù)表和相同的返回類型重寫(xiě)舉例成員變量的隱藏和方法的重寫(xiě)class
SuperClass{int
x;
…void
setX(
){ x=0;
}
…}class
SubClass
extends
SuperClass{int
x; //hide
x
in
SuperClass…void setX(
)
{ //override
method
setX()x=5;
}
….}Supersuper用來(lái)引用當(dāng)前對(duì)象的父類訪問(wèn)父類被隱藏的成員變量,如:super.variable;調(diào)用父類中被重寫(xiě)的方法,如:
super.Method([paramlist]);調(diào)用父類的構(gòu)造函數(shù),如:
super([paramlist]);class
SuperClass{int
x;SuperClass(
)
{x=3;System.out.println(“in
SuperClass
:x=“
+x);}void
doSomething(
)
{System.out.println(“inSuperClass.doSomething()”);}}class
SubClass
extends
SuperClass
{int
x;SubClass(
)
{super(
); //call
constructor
of
superclassx=5; //super(
)
要放在方法中的第一句System.out.println(“in
SubClass
:x=“+x);}void
doSomething(
)
{super.doSomething(
);
//call
method
ofsuperclassSystem.out.println(“in
SubClass.doSomething()”);System.out.println(“super.x=”+super.x+“sub.x=”+x)}}public
class
inheritance
{public
static
void
main(String
args[])
{SubClass
subC=new
SubClass();subC.doSomething();}}多態(tài)性是由封裝性和繼承性引出的面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言的另一特征。靜態(tài)多態(tài)性(編譯時(shí)多態(tài)〕 由方法重載(overload)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性(運(yùn)行時(shí)多態(tài))子類對(duì)象可以作為父類對(duì)象使用。在程序中凡是需要父類對(duì)象的地方,都可以用子類對(duì)象代替。由方法重寫(xiě)(overridden)實(shí)現(xiàn)調(diào)用規(guī)則:根據(jù)實(shí)例的類型決定調(diào)用的方法。重寫(xiě)方法的調(diào)用規(guī)則class
A{void
callme(
)
{System.out.println(“Inside
A’s
callme()method”);
}}class
B
extends
A{void
callme(
)
{System.out.println(“Inside
B’s
callme()Method”)
}}方法重寫(xiě)應(yīng)遵循的原則改寫(xiě)后的方法不能比被重寫(xiě)的方法有更嚴(yán)格的訪問(wèn)權(quán)限改寫(xiě)后的方法不能比重寫(xiě)的方法產(chǎn)生更多的例外class
Parent{public
void
function(
)
}
}class
Child
extends
Parent{private
void
function(
)
}
}public
class
OverriddenTest{public
static
void
main(String
args[])
{Parent
p1=new
Parent();Parent
p2=new
Child();p1.function();p2.function();
}}對(duì)象狀態(tài)的確定(instanceof)Manager和Contractor都是Employee的子類public
void
method(Employee
e)
{ if (e
instanceof
Manager)…
//do
something
as
a
Manager} else
if
(
e
instanceof
Contractor)
{…
}
//do
something
as
a
Contractorelse
{…
//do
something
else}}final關(guān)鍵字final修飾變量,則成為常量
final
type
variableName;修飾成員變量時(shí),定義時(shí)同時(shí)給出初始值,而修飾局部變量時(shí)不做要求。final修飾方法,則該方法不能被子類重寫(xiě)
final
returnType
methodName(paramList){…}final修飾類,則類不能被繼承
final
class
finalClassName{…}實(shí)例成員和類成員實(shí)例成員為實(shí)例所有,通過(guò)對(duì)象訪問(wèn);類成員為類所有,不屬于某一個(gè)類,可以通過(guò)類名訪問(wèn)。類成員的格式(static):static
type
classVar;static
returnTypeclassMethod({paramlist])
{…}實(shí)例變量和類變量每個(gè)對(duì)象的實(shí)例變量都分配內(nèi)存通過(guò)對(duì)象來(lái)訪問(wèn)這些實(shí)例變量類變量?jī)H在生成第一個(gè)對(duì)象時(shí)分配內(nèi)存,所有實(shí)例對(duì)象共享同一個(gè)類變量。類變量可通過(guò)類名直接訪問(wèn),無(wú)需先生成一個(gè)實(shí)例對(duì)象也可以通過(guò)實(shí)例對(duì)象訪問(wèn)類變量實(shí)例變量和類變量class
ABCD{ char
data;static
int_share_data;
}class
Demo{
ABCD
a,b,c,d}object
bchar
dataobject
cchar
dataObject
bchar
datastatic
intshare_dataobject
bchar
data類方法不能訪問(wèn)實(shí)例變量,只能訪問(wèn)類變量類方法可以由類名直接調(diào)用類方法中不能使用this或superclass
member
{static
int
classVar;int
instanceVar;static
void
setClassVar(int
i)
{classVar=i;//
instanceVar=i; //can’t
access
nostatic
member}類java.lang.Object該類定義了一些所有對(duì)象最基本的狀態(tài)和行equals():比較兩個(gè)對(duì)象(引用〕是否相同,如果相同返回true,否則返回false。相當(dāng)于操作符“==”;getClass():
返回對(duì)象運(yùn)行時(shí)所對(duì)應(yīng)的類的表示,從而可得到相應(yīng)的信息,例如,運(yùn)行時(shí)取得聲稱對(duì)象的類的名稱,
obj.getClass().getName()clone(),創(chuàng)建和返回一個(gè)對(duì)象的拷貝,Cloneable接口hashCode():返回一個(gè)對(duì)象的hash編碼,同一個(gè)對(duì)象,在任何時(shí)候,都返回同一個(gè)值,在hashTable中使用。toString(),返回對(duì)象的字符串表示。getClass().getName()
+
'@'
+
Integer.toHexString(hashCode())finalize(),用于在垃圾收集前清除對(duì)象。notify(),notifyAll(),wait(),用于多線程處理中的同步。Java.lang.Class一個(gè)特殊的類,沒(méi)有public構(gòu)造函數(shù)。當(dāng)類被裝入時(shí),它的對(duì)象由jvm自動(dòng)生成。Class的對(duì)象描述java程序運(yùn)行中的使用的類或者接口。常用的方法有static
Class
forName(String
className)String
getName()Object
newInstance()實(shí)時(shí)程序演示查看J2SDK的文檔抽象類用abstract來(lái)修飾類或方法abstract
class
abstractClass{
…}abstract
returnType
abstractMethod([paramlist])抽象類不能被實(shí)例化,必須被繼承,抽象方法必須被重寫(xiě),生成它的子類。抽象方法只需聲明,無(wú)需實(shí)現(xiàn);抽象類不一定要包含抽象方法,若類中包含了抽象方法,則該類必須被定義為抽象類可以把抽象類作為變量的類型。接口接口類似抽
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 掛車(chē)租出合同6篇
- 場(chǎng)地有償使用合同7篇
- 公寓式房屋轉(zhuǎn)租合同
- 廣告制作安裝合同書(shū)
- 臨街商鋪?zhàn)赓U合同
- 工程降水分包合同
- 土地利用規(guī)劃的制定與執(zhí)行指導(dǎo)書(shū)
- 員工租賃車(chē)輛協(xié)議
- 信封印刷合同6篇
- 圍墻工程包工合同
- 2025年安全員C證(專職安全員)考試題庫(kù)
- 地理-天一大聯(lián)考2025屆高三四省聯(lián)考(陜晉青寧)試題和解析
- 醫(yī)療衛(wèi)生系統(tǒng)招聘考試(中醫(yī)學(xué)專業(yè)知識(shí))題庫(kù)及答案
- 貴州省貴陽(yáng)市2024-2025學(xué)年九年級(jí)上學(xué)期期末語(yǔ)文試題(含答案)
- 小巴掌童話課件
- 教科版六年級(jí)科學(xué)下冊(cè)全冊(cè)教學(xué)設(shè)計(jì)教案
- 部編版小學(xué)五年級(jí)下冊(cè)《道德與法治》全冊(cè)教案含教學(xué)計(jì)劃
- 2024年青島遠(yuǎn)洋船員職業(yè)學(xué)院高職單招語(yǔ)文歷年參考題庫(kù)含答案解析
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2024建筑施工安全生產(chǎn)隱患識(shí)別圖合集
- 2025年江蘇南京技師學(xué)院招聘工作人員19人高頻重點(diǎn)提升(共500題)附帶答案詳解
評(píng)論
0/150
提交評(píng)論