標籤:super nbsp jar package mat 抽象方法 介面 math 珠穆朗瑪峰
面向過程的設計思想物件導向的設計思想對象和類的關係java類的定義建構函式(構造方法)對象的建立和使用this 關鍵字static 關鍵字package 和 import 關鍵字許可權修飾符(存取控制)類的繼承方法的重寫final 關鍵字對象轉型多態抽象類別介面- - -- - - - - - - - - - - - - - -- -- - -- - -- -- -- - -- -- - -- --物件導向: 1, 面向過程的思想 準備去一個地方: 先買車, 掛牌, 開導航, 踩油門, 過黃河, 穿越珠穆朗瑪峰... 2, 物件導向的思想 我開著車去, 車怎麼去隨便 所有去這個地方的資訊, 全部封裝在這個車裡面, 我不瞭解這個車是怎麼啟動並執行, 我也不需要瞭解, 我只知道我能到達這個地方就行了 物件導向的基本思想是, 從現實世界中客觀存在的事物出發, 來構造軟體系統, 並在系統的構造中儘可能的運用人類的自然思維方式, 物件導向是目前人與電腦溝通最簡單的語言思想 合適的方法出現在合適的類裡面 3, 什麼是類, 什麼是對象? 對象是類的一種執行個體化, 對象用"屬性"和"方法"來對應描述事物所具有的"靜態屬性"和"動態屬性" 類是用於描述同一類形的對象的一個抽象的概念, 類中定義了這一類對象應該具有的"靜態屬性"和"動態屬性" 類可以看成是一類對象的模板, 對象可以看成該類的一個具體執行個體.舉個栗子(什麼是瓶子-->一類事物的抽象-->靜態屬性,動態屬性)什麼是類? 學生是類, 瓶子是類, 老師是類舉個栗子(人-->學生-->張三)什麼是對象? 這個學生是對象, 這個瓶子是對象, 這個老師是對象, 符合這類事物的特徵的某一個東西, 叫對象 領導-->顯示職工的姓名 職工:合適的方法出現在合適的類裡(有圖有真相) 靜態屬性: 姓名: 張三 年齡: 24 工資: 3000 動態屬性: 顯示姓名 顯示年齡 修改姓名 領取工資
4, 類與類之間的關係
1.關聯關係(最弱的一種關係)(有圖有真相):
不好下一個定義, (A類中某個方法的參數是B類的某一個對象)
舉個栗子(學生<--學校-->老師)
老師要講課, 這是一個方法, 要傳個參數進去, 參數是學生對象
2.繼承關係(避免多重繼承)(有圖有真相) extends
什麼是一種什麼
舉個栗子(運動員-->球類運動員-->籃球運動員)
3.彙總關係(聚集, 組合)(有圖有真相)
什麼是什麼的一部分
舉個栗子(球隊-->(王隊長, 隊員))
組合----人: 頭, 身體
聚集:構成這個類的這部分可以是這個類的, 也可以是另外一個類的,
組合:每一部分只屬於一個類
4.實現關係(有圖有真相) implements
介面:只管定義方法, 怎麼實現由子類去做
舉個栗子(介面(開車的方法), A類可以實現, B類也可以實現)
5, java類的定義, 對象和引用 定義一個類: public class 類名{ 成員變數 成員方法 }引用這個類: //在main中的執行個體化(引用)類名 變數名 = new 類名(); 變數名.成員變數/成員方法//可以 點 出裡面的成員變數和成員方法 java: 萬物皆對象, 處處皆需求對象是對屬性(成員變數, 靜態屬性)和方法(函數, 動態屬性)的封裝包括:java中提供的類(math/random), 程式員自己定義的類 為什麼要使用物件導向的思想: 物件導向更容易達到一種境界: Reusable(重用性), Extensibility(可擴充性) //本意是繼承和擴充的意思,有些地方是派生的含義 面向組件(Component)--比對象更高層次的抽象 WebService 6, 成員變數的初始化(有圖有真相) 整數型--0 浮點型--0.0F/D boolean--false char--‘/u0000‘ String--null 成員變數可以是java中任意一種資料類型(基礎資料類型和參考型別) 什麼是參考型別 ? 就是那些類,作為類的,也就是指那些對象,還包括數組(都是對象), 介面 成員變數可以是介面(介面是參考型別,當它未指向任何一個引用的子類時),初始化值為 null null--是對象,表示什麼都不指向. 成員變數可以初始化, 也可以不初始化(java預設初始化)成員變數和局部變數的區別: 成員變數的作用範圍-->整個類 類和對象的關係 C c1 = new C(); // C是類, c1 c2是對象, C();是方法. C c2 = new C(); // c1, c2在這裡是局部變數
7, 建構函式(構造方法)
在使用 new 來建立一個對象的時候就是調用的這個類的一個構造方法(建構函式),
構造方法名與類名同名, 並且沒有傳回值(沒有傳回值也不要寫void)
區分空參的建構函式和有參數的建構函式
//如果什麼也不寫,程式預設是有一個空參的構造方法的.
//如果寫了一個有參數的構造方法,就會自動覆蓋空參的構造方法,所以也要再寫一個空參的構造方法
注釋, 命名規則!!!!!!!!!!
//變數名如果定義的很隨意,代碼量很多就會忘記寫的是什麼了.所以要寫好名
// 不要這樣 String aa = "";
繼承中的建構函式:
--子類的構造方法必須調用父類的構造方法(不管調用哪一個)
--super(), 調用父類的構造方法, this()表示當前對象的引用,調用本類中另外的構造方法
8, 關鍵字this, static, package和import語句
this:(this表示當前對象的引用)
--在類的方法定義中使用this關鍵字代表使用該方法的對象的引用
//即,在同一個類中,用this.可以調用另一個方法
--當必須指出當前使用方法的對象是誰時要使用this
--有時this可以處理方法中成員變數和參數重名的情況
--this可以看作是一個變數, 它的值是當前對象的引用
static(不在堆裡面也不在棧裡面, 在資料區(data seg)):
--類名直接 . 出來的變數是靜態變數, 每個類裡面的靜態變數只有一份,
是公用的(賦值後每個執行個體化的類都可使用)
--靜態方法中不可訪問非靜態成員
--靜態變數和靜態方法不需要執行個體化
--計數
--單例模式
package:
--便於管理大型軟體系統中數目眾多的類, 解決類名重名的現象
--產生.jar檔案 jar -cvf test.jar 路徑/*.*(或者使用eclipse中的Export選項)
9, 存取控制, 許可權修飾符( private (什麼也不寫) protected public)(有圖有真相) puclic class 類名 { private 類型 屬性1; private 類型 屬性2; set, get方法(eg.public String getName() { return name; } public void setName(String name) { this.name = name; } ) }
10, 物件導向的三大特性: 封裝, 繼承, 多態
封裝(...)
封裝性就是把類(對象)的屬性和行為結合成一個獨立的相同單位,並儘可能隱蔽類(對象)的內部細節,對外形成一個邊界,只保留有限的對外介面使之與外部發生聯絡。封裝的特性使得類(對象)以外的部分不能隨意存取類(對象)的內部資料(屬性),保證了程式和資料不受外部幹擾且不被誤用。
繼承:
子類擁有父類的屬性和方法(構造方法除外)
是實現代碼複用的重要手段。Java的繼承具有單繼承的特點,即只能繼承自一個父類,每個子類只有一個直接父類,但是其父類又可以繼承於另一個類,從而實現了子類可以間接繼承多個父類,但其本質上劃分仍然是一個父類和子類的關係。
多態((執行期間)動態綁定, 或者叫池綁定)(有圖有真相):
多態的定義:指允許不同類的對象對同一訊息做出響應。即同一訊息可以根據發送對象的不同而採用多種不同的行為方式。(發送訊息就是函數調用)
//也就是可以調用父類的同一個方法可以實現不同的結果
實現多態的技術稱為:動態綁定(dynamic binding),是指在執行期間判斷所引用對象的實際類型,根據其實際的類型調用其相應的方法。
多態的作用:消除類型之間的耦合關係。
重載(overload):
//是發生在同一個類裡面的,對同一個方法進行不同的體現的關係
方法名相同, 只有參數類型不同或參數個數不同.傳回值不同是不能構成重載的
重寫(overwrite / override):
將父類的方法重新定義
--在子類中可以根據需要,從父類中繼承來的方法進行重寫
--重寫方法必須和被重寫的方法具有相同的方法名, 參數列表和傳回型別
--重寫方法不能使用比被重寫方法更嚴格的存取權限
toString方法的重寫 alt+shif+s (選toString()這個)
equals方法的重寫 (選 hashcode() and equals這個)
11,super, final關鍵字
super: 指向父類的引用
final的變數值不能改變
final的方法不能被重寫
final的類不能被繼承
12, 對象轉型(casting)
--父類的引用可以指向其子類的對象(使得代碼的統一性提高, 便於擴充)
--父類的引用不可以訪問其子類對象新增的成員(包括屬性和方法), 如果硬要訪問-->強轉
--可以使用instanceof關鍵字來判斷一下這個變數是不是這個類或者是這類的子類
13, 抽象類別(方法)---類的擴充
--使用abstract關鍵字修飾的類(方法)
--含有抽象方法的類必須被聲明為抽象類別
--抽象類別不能被執行個體化
--抽象方法只需要聲明, 不需要被實現
14, 介面(一種特殊的抽象類別, 所有的方法是一個抽象方法)---類需要實現的功能 --文法定義: public interface InterfaceTest{ } -- 一個類去實現一個介面, 使用implements關鍵字: public class test implements InterfaceTest{ } --多個無關的類可以實現同一個介面 --一個類可以實現多個無關的介面(注意避免介面方法重名的現象) --與繼承關係類似, 介面與實作類別之間存在多態性 --介面中的屬性預設為 public static final 也只能是public static final的 --介面中只能定義沒有實現的方法, 預設為 public, 也只能是 public, 介面可以繼承其他的介面並添加新的屬性和方法(沒有實現的) --從JDK1.8以後介面開始可以有實現的方法, 使用default關鍵字修飾
--end--
Java-物件導向(基礎知識)