對(duì)象的特征:狀態(tài)(state)和行為(behabior)
人 身高,體重 吃飯,睡覺(jué)
現(xiàn)實(shí)世界對(duì)象的狀態(tài)保存在軟件對(duì)象的變量中,先是世界對(duì)象的行為通過(guò)軟件對(duì)象的方法(函數(shù))來(lái)實(shí)現(xiàn)、。
類(lèi)和對(duì)象
把相似的對(duì)象歸成一個(gè)類(lèi)。
類(lèi)就是模版定義了通用與一個(gè)特定種類(lèi)的所有對(duì)象的狀態(tài)(變量)和行為(方法)
類(lèi)是創(chuàng)建對(duì)象的模版,對(duì)象是類(lèi)的實(shí)例。
掌握面向?qū)ο蟮碾y點(diǎn)在于思路的轉(zhuǎn)換,我們通常考慮解決問(wèn)題的方法。而不是考慮將問(wèn)題抽象成對(duì)象再去解決它。
編寫(xiě)一個(gè)駕駛汽車(chē)的方法
面向過(guò)程的程序設(shè)計(jì): 編寫(xiě)一個(gè)方法,void drivercar();
面向?qū)ο蟮某绦蛟O(shè)計(jì): 將一輛汽車(chē)看成一個(gè)對(duì)象,將所有汽車(chē)對(duì)象的共性抽取出來(lái),設(shè)計(jì)一個(gè)類(lèi)Car,
類(lèi)中有一個(gè)方法void drive(),用Car這個(gè)類(lèi)實(shí)例化一個(gè)具體的對(duì)象car,調(diào)用:car.drive().
new關(guān)鍵字的作用。
為對(duì)象分配內(nèi)存空間,引起對(duì)象構(gòu)造方法的調(diào)用。為對(duì)象返回一個(gè)引用。
構(gòu)造方法的名字和類(lèi)名相同,并且沒(méi)有返回值。
構(gòu)造方法主要用于為類(lèi)的對(duì)象定義初始化狀態(tài)。
我們不能直接調(diào)用構(gòu)造方法,必須通過(guò)new關(guān)鍵字來(lái)自動(dòng)調(diào)用,從而創(chuàng)建類(lèi)的實(shí)例。
java的類(lèi)都要求有構(gòu)造方法,如果沒(méi)有定義構(gòu)造方法,java編譯器會(huì)為我們提供一個(gè)缺省的構(gòu)造方法,也就是不帶參數(shù)的構(gòu)造方法。
缺省構(gòu)造方法默認(rèn)值:數(shù)值 0
booeean false
char ”\0"
對(duì)象 null
方法的重載:重載構(gòu)成的條件:方法的名稱(chēng)相同,但是參數(shù)類(lèi)型或參數(shù)個(gè)數(shù)不同,才能構(gòu)成方法的重載。
特殊變量this
this變量代表對(duì)象本身。
當(dāng)類(lèi)中有兩個(gè)同名變量,一個(gè)屬于類(lèi)(類(lèi)的成員變量),而另一個(gè)屬于某個(gè)特定的方法(方法的局部變量),
使用this區(qū)分成員變量和局部變量
使用this簡(jiǎn)化構(gòu)造函數(shù)的調(diào)用。可以通過(guò)不帶參數(shù)的構(gòu)造方法調(diào)用帶參數(shù)的構(gòu)造方法。
Point(int a,int b)
{
x=a;
y=b;
}
Point()
{
this(1,2);
}
一個(gè)類(lèi)所有的實(shí)力(對(duì)象)調(diào)用的成員方法在內(nèi)存中只有一份拷貝,盡管在內(nèi)存中可能有多個(gè)對(duì)象,
而數(shù)據(jù)成員在類(lèi)的每個(gè)對(duì)象所在內(nèi)存中都存在這一份拷貝。this變量允許相同的實(shí)例方法為不同的對(duì)象工作。
每當(dāng)調(diào)用一個(gè)實(shí)例方法時(shí),this變量將被設(shè)置成引用改實(shí)例方法的特定的類(lèi)對(duì)象。方法的代碼接著會(huì)與this所代表的特定數(shù)據(jù)建立關(guān)聯(lián)。
內(nèi)存模型 的概念
靜態(tài)方法和靜態(tài)變量時(shí)屬于某一個(gè)類(lèi),而不屬于類(lèi)的對(duì)象。
靜態(tài)方法和靜態(tài)變量的引用直接通過(guò)類(lèi)名引用。
在靜態(tài)方法中不能調(diào)用非靜態(tài)的方法和引用非靜態(tài)的成員變量。反之,則可以。
可以用類(lèi)的對(duì)象obj去調(diào)用靜態(tài)的方法method(),如 obj。method()。
final定義的變量要在定義時(shí)初始化也可以放在構(gòu)造函數(shù)中實(shí)現(xiàn)
常量通常定義為靜態(tài)的,是為了節(jié)省內(nèi)存。這時(shí)就要在定義時(shí)初始化。
final定義的常量一般默認(rèn)用大寫(xiě)。
繼承
繼承是面向?qū)ο蟮年P(guān)鍵
在java中,通過(guò)關(guān)鍵字extends繼承一個(gè)已有的類(lèi),被繼承的稱(chēng)為父類(lèi)(超類(lèi),基類(lèi)),新的類(lèi)稱(chēng)為子類(lèi)(派生類(lèi))。
在java中,不允許多繼承。
方法的覆蓋
在子類(lèi)中定義一個(gè)與父類(lèi)同名、返回類(lèi)型、參數(shù)類(lèi)型均相同的一個(gè)方法,稱(chēng)為方法的覆蓋。覆蓋發(fā)生在子類(lèi)與父類(lèi)之間。
class Animal
{
int height,weight;
void eat()
{
System.out.println("animal eat");
}
void breathe()
{
System.out.println("animal breathe");
}
void sleep()
{
System.out.println("animal sleep");
}
}
class Fish extends Animal
{
void breathe()
{
System.out.println("fish bubble");
}
}
class Integration
{
public static void main(String[] args)
{
Animal an=new Animal();
Fish fh= new Fish();
an.breathe();
fh.height=30;
fh.breathe();
}
}
特殊變量super,提供了對(duì)父類(lèi)的訪(fǎng)問(wèn)。
可以使用super訪(fǎng)問(wèn)父類(lèi)被子類(lèi)隱藏的變量或覆蓋的方法。
每個(gè)子類(lèi)構(gòu)造方法的第一條語(yǔ)句,都是隱含的調(diào)用super(),如果父類(lèi)沒(méi)有這種形勢(shì)的構(gòu)造函數(shù),那么在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。
class Animal
{
int height,weight;
void eat()
{
System.out.println("animal eat");
}
void breathe()
{
System.out.println("animal breathe");
}
void sleep()
{
System.out.println("animal sleep");
}
}
class Fish extends Animal
{
void breathe()
{
super.breathe();
super.height=40;
System.out.println("fish bubble");
}
}
class Integration
{
public static void main(String[] args)
{
//Animal an=new Animal();
Fish fh= new Fish();
//an.breathe();
fh.height=30;
fh.breathe();
}
}
多態(tài)性,子類(lèi)有就調(diào)用子類(lèi)的。沒(méi)有就調(diào)用父類(lèi)的
instanceof
比較一個(gè)實(shí)例是否是一個(gè)類(lèi)的實(shí)例