1.陣列以控制代碼的方式來管理記憶體
2.方法的overload(物件導向的性質,以多型的形式)
只允許根據引數列表(引數型別、個數、順序等)進行區分,那為什麼不能根據返回值型別進行區分呢?
因為在呼叫方法時候,一定要能體現出來其特徵。
類的封裝
類似於開車與汽車的原理
(1)把資料和方法緊密繫結在一起
(2)從外面看,僅知道一些介面,但不知道介面的具體如何操作
優點:隱藏細節
那麼為什麼要封裝呢?
因為除了隱藏細節,更需要保證自身邏輯的完整性
一般需要定義成員變數(屬性)和成員方法
private是私有成員,不能被外部類訪問 ——隱藏資訊
為了訪問私有成員,需要定義public方法 ——封裝
舉個栗子:
比如這程式,未進行封裝,取值超出了範圍,未能保證邏輯完整性。
關於構造方法:
(1)名與所在類一致
(2)沒有返回值型別
說明:如果沒有定義,系統預設呼叫此方法
類在使用前,必須使用new()建立,public是可以通過實力物件訪問,private對外部不可見。
上圖程式,如果不定義則初始化能否呼叫?
否,因為在程式中還有其他建構函式,並不會呼叫系統預設的建構函式。
static關鍵字:「靜態」:分配的位址是固定不變得
定義一些與類無關的變數和方法時,使用static關鍵字
即使沒有建立那個類的乙個例項物件也可以呼叫乙個static方法或者訪問乙個static變數
static的變數或方法在程式初始化之前分配空間,而其他變數或方法在程式執行中動態分配空間。使用「類名.方法名」的方式可以直接呼叫static方法。比如 常用的math類
例如:public static void main(string args) 虛擬機器需要找到整個程式的入口點,如果因為main所在的class沒有生成物件,導致main無效,那程式就無法啟動了。
一些基本資料型別的封裝類:
類的初值
(1)利用overload構造方法
(2)利用set、get方法
友誼成員
變數或者方法之前沒有訪問修飾字,則成為友誼成員或者套件訪問,只能訪問當前包
單例模式:在記憶體中只有乙個例項
例如:
singleton的特點是由類自己來保證例項的唯一性class singleton
public
static singleton getinstance()}}
return instance ;}}
類的繼承
繼承的思想:
先定義乙個包含公用方法和公用變數的類做為父類,在此基礎上建立具有專用方法和專用變數的的類作為子類,方便程式設計。
預設的父類為 object類
繼承能夠體現出父類和子類物件的一種邏輯聯絡
父類的構造方法不能被繼承,其private成員變數和成員方法不能被子類繼承,雖然不能繼承,但是在記憶體中依然存在,可以間接訪問到。protected成員可以被子類訪問。super表示「父類的」
說明:子類在繼承父類後,其方法只能擴大所繼承的範圍,即 只能把protect改為public,不可以把protect改為private
舉個栗子1:
輸出結果為:public
class
equals
}
false
true
舉個栗子2:
輸出結果:class integer
}public
class equals2
}
false
false
雖然我們常常使用equals()方法進行比較值,但是它預設是比較控制代碼的,很多封裝類的比較值得實現,其實都是自己重寫的equals()方法。總結一波,equals()方法的預設行為時比較物件的控制代碼,如果是自定義的類,需要override equals()方法。
關於tostring()方法
先上**,栗子1:
輸出結果為:class tostringclass
}public
class
tostringtest
}
100
tostringclass@74a14482
tostringclass@74a14482
栗子2:
輸出結果為:class tostringclass
}public
class
tostringtest
}
100
i=100
i=100
顯然栗子2比栗子1只差乙個自己重寫的tostring()方法,,可以得出結論:
(1)或取控制代碼的字串屬性時候,jvm會自動呼叫其tostring()方法
(2)tostring()方法繼承於object,有時候需要重寫一波
注:不同型別的例項進行賦值時,只允許將子類的例項賦給父類的控制代碼。因為物件導向描述的是現實中的事物,有一定邏輯在裡面。
類的多型
主要體現:方法的override、upcasting、downward cast
upcasting栗子:
輸出:class upper
}class down extends upper
}public
class
test
public
static
void
main(string args)
}
down.f()
downward cast栗子:
upcasting和downward cast異同點:public
void
dosomething(employee e)
system.out.println("this is the manager 0f"+m.getdepartment)
}
相同:
(1)用父類做形參
(2)子類做實參傳遞
(3)執行子類的方法
不同:
呼叫父類和子類共同的方法時,upcasting用的是父類就已經有的方法,而downward cast ,用於呼叫父類無子類有的方法
關於 抽象類、介面、內部類
抽象類:abstract class,不能被例項化為物件。只能被繼承使用,抽象類被繼承後,必須將所有的抽象方法實現,否則子類依然是抽象類。
抽象方法:(1)abstract關鍵字(2)只有方法名,沒有方法實體
擁有抽象方法的的類一定是抽象類。
內部類:inner class
介面:inte***ce
使用關鍵字 inte***ce定義,介面中的變數都是final static,介面中沒有構造方法,並且定義的成員方法都是抽象方法(預設為abstract),採用多重繼承機制。
實現乙個介面就具備介面所定義的某個能力或特性
舉個栗子:
java物件導向程式設計
抽象及封裝 簡述抽象和封裝 1 為什麼使用物件導向?現實世界就是 物件導向的 世間萬物皆物件,物件導向就是採用 現實模擬 的方法設計和開發程式。2 物件導向設計的過程就是抽象的過程,分一下3步 1 發現類 2 發現類的屬性 3 發現類的方法 3 類圖 this通常指當前物件的引用,它可以呼叫當前物件...
java物件導向程式設計
物件導向程式設計 object oriented programming 簡稱oop 什麼是物件導向程式設計 世界萬物皆物件,一切都是物件!1,類 是對一類事物的抽象描述,注意 在程式裡面定義好乙個類以後,並不能真正的執行,如果要使類發揮效果執行起來,必須建立物件 類包含屬性和方法 構造方法 是在建...
java物件導向的程式設計
1 練習題 類的成員變數 猜數字遊戲 乙個類a 有乙個成員變數 v,有乙個初值 100。定義有乙個類,對 a類的成員變數 v進行猜。如果大了則提示大了,小了則提示小了。等於則提示猜測成功。package lei public class a void speedup this.speed speed...