首頁  >  文章  >  Java  >  java物件導向特性介紹

java物件導向特性介紹

王林
王林轉載
2020-02-05 17:54:532275瀏覽

java物件導向特性介紹

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中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除