Java物件導向的三大特性:
封裝、繼承、多型。
一、封裝
將類別的資訊隱藏在類別內部,不允許外部程式直接訪問,而是透過該類別提供的方法來實現對隱藏訊息的操作與存取。
封裝的實作步驟:
修改屬性的可見性:設為private
建立getter/setter方法:用於屬性的讀寫
在getter/setter方法中加入屬性控制語句:對屬性值的合法性進行判斷
(建議學習:java影片教學)
修改屬性的可見性用private,例如:
//表示读取该方法中的screen public float getScreen{ return screen; } //有viod无返回值,变量名.属性=值,就不能直接调用可以通过变量名.getScreen()来实现 public viod setScreen(float newScreen){ screen = newscreen; }
變數名.屬性=值就不能直接呼叫可以透過變數名稱.getScreen()來實現。
套件的作用:
1、管理Java檔案
2、解決同名檔案衝突
定義套件:package
包名註:必須放在Java原始程式的第一行包名間可以使用"."號隔開例如:com.imooc.MyClassJava中,包的命名規範是全小寫字母拼寫。
Java中的存取控制修飾符
public,default,protected,private
public:公有,所有類別都可以存取
default:預設修飾符,同包內存取
protected:保護型。同包內以及繼承了此類的外包類可以存取
private:私有類,只有本類內可以存取
final,finally,finalize(繼承中)
final: 修飾符。被此修飾符修飾的類別不能被繼承;被此修飾符修飾的變數不能被修改,只能讀取;被此修飾符修飾的方法只能使用,可以被重載,不能被重寫;此修飾符不能修飾抽象類別。
finally: 捕獲異常後的清除操作
finalize:一個方法;主要是在GC將物件刪除之前,先對物件呼叫finalize方法,來確定物件是否被引用
Java中的this關鍵字
//原来手动输入 public void setScreen( float newScreen){ screen = newScreen; } // 用eclips 自动生成的是 public void setScreen( float newScreen){ this.screen = screen; }
this.屬性: 操作目前物件的屬性
this.方法:呼叫目前物件的方法
ecilipse中可以直接產生setter,getter方法並加入this關鍵字。
this關鍵字呼叫的是成員變數或成員方法靜態成員、靜態方法中不能用this和super關鍵字同時還可以傳回類別的參考和呼叫建構方法
# Java 中的靜態內部類別
靜態內部類別是static 修飾的內部類,這種內部類別的特點是:
1、靜態內部類別不能直接存取外部類別的非靜態成員,但可以透過new 外部類別().成員的方式存取。
2、如果外部類別的靜態成員與內部類別的成員名稱相同,可透過「類別名稱.靜態成員」存取外部類別的靜態成員;如果外部類別的靜態成員與內部類別的成員名稱不相同,則可透過「成員名」直接呼叫外部類別的靜態成員。
3、建立靜態內部類別的物件時,不需要外部類別的對象,可以直接建立 內部類別 物件名稱= new 內部類別();。
二、繼承
繼承的概念:是類別與類別的一種關係。
繼承的好處:
1)子類別擁有父類別的所有屬性和方法(private修飾的無效)
2)實作程式碼復現
語法規則:class 子類別extends 父類別{ }
方法的重寫:
子類別對父類別的繼承不滿意,重寫自己的內容且重寫後優先呼叫子類別方法
語法規則:
#傳回值,類型,方法名稱參數類型個數都要與父類別整合方法相同,才叫重寫
繼承初始化順序:
父類別屬性初始化>父類別建構方法>子類別屬性初始化>子類別建構方法0
super關鍵字:
在物件的內部使用,可以代表父類別物件。
存取父類別的屬性:super.age;
存取父類別的方法:super.eat();
super的應用程式:
子類別的建構方法過程中,必須呼叫父類別的建構方法。
如果子類別的建構方法中沒有顯示呼叫父類別的建構方法,則系統預設呼叫父類別的無參構造方法。
如果顯示的呼叫建構方法,必須在子類別的建構方法的第一行。
如果子類別建構方法中沒有顯示呼叫父類別的建構方法,父類別也沒有無參的建構方法,編譯就會出錯。
Object類別:
沒有標識繼承了誰的類別相當於繼承了Object類別
toString()方法:
在Object類別裡定義toString()方法的時候回傳的物件的哈希code碼(物件位址字串)
可以透過重寫toString()方法表示出物件的屬性
equals()方法:
#比較的是物件的參考是否指向同一塊記憶體位址。注意:比較兩個對象equals()方法是不適用的,創建新的對象, 內存會創建新的儲存地址,所以即使對象屬性都一致, 也是不相等,要比較對象具體屬性值相同,就需要重寫equals()方法
比較getClass()回傳類別物件:
getClass()傳回的是類別物件:描述類別的程式碼訊息,類別的屬性有哪些、類型是什麼、變數名是什麼、方法名是什麼,更關注的是類別的程式碼資訊。
建立物件名稱回傳的是類別的物件:
關注的是物件的屬性值得訊息,或者說是這個物件資料的訊息
#三、多態
多態: 指的是物件的多種形態,主要分為引用多態、方法多態。
繼承是多態的實作基礎,別忘了子父類別要有繼承關係.
多型態:
1、引用多態
父類別參考可以指向本類別物件Animal obj1 = new Animal();
父類別引用可以指向子類別物件Animal obj2 = new Dog();
但是我們不能用子類別的引用指向父類別物件Dog obj3 = new Animal();//錯
2、方法多型
類別Animal中定義一個eat()方法,輸出一個語句(動物有吃的能力); 在子類Dog中重寫eat()方法,輸出一個語句(狗是吃肉的); 那我們在測試類main函數裡面,如果obj1.eat( ) ,那麼呼叫的是父類別的方法. 若用obj2呼叫eat()方法,那麼呼叫的是子類別的方法。
還有一種情況,例如建立一個繼承父類別Animal的子類別Cat ,但是Cat裡並不重寫繼承的eat()方法. 然後,我們在測試類別main函數裡建立一個子類物件, Animal obj3 = new Cat(); 然後呼叫obj3.eat(); 那麼,結果呼叫的則是子類別繼承父類別的方法. (輸出結果:動物有吃的能力)。
最後一種特殊情況,多態的特性是不能使用的. 若在子類別中加入一個獨特的方法public void watchDoor() ,含有一句輸出語句(狗具有看門的能力);那我們在測試類別的main函數當中(得先定義好物件Animal obj2 = new Dog() ),就不能用obj2.watchDoor(),即不能透過父類別的引用呼叫子類別的方法。
相關文章教學推薦:java入門教學
以上是java物件導向特性介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!