Java面向對象的那些特性

Java面向對象的三大特性

封裝、繼承、多態

封裝

封裝:
將類的信息隱藏在類內部,不允許外部程序直接訪問,而是通過該類提供的方法來實現對隱藏信息的操作與訪問。
封裝的實現步驟:
修改屬性的可見性:設爲private
創建getter/setter方法:用於屬性的讀寫
在getter/setter方法中加入屬性控制語句:對屬性值的合法性進行判斷

修改屬性的可見性用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();
  2. 父類引用可以指向子類對象 Animal obj2 = new Dog();
    但是我們不能用子類的引用指向父類對象 Dog obj3 = new Animal();//錯

二、方法多態

  1. 類Animal中定義一個eat()方法,輸出一個語句(動物有喫的能力); 在子類Dog中重寫eat()方法,輸出一個語句(狗是喫肉的); 那麼我們在測試類main函數裏面,如果obj1.eat() ,那麼調用的是父類的方法. 若用obj2調用eat()方法,那麼調用的是子類的方法
  2. 還有一種情況,比如創建一個繼承父類Animal的子類Cat ,但是Cat裏並不重寫繼承的eat()方法. 然後,我們在測試類main函數裏創建一個子類對象, Animal obj3 = new Cat(); 然後調用 obj3.eat(); 那麼,結果調用的則是子類繼承父類的方法. (輸出結果:動物有喫的能力)
  3. 最後一種特殊情況,多態的特性是不能使用的. 若在子類添加一個獨有的方法 public void watchDoor() ,含有一句輸出語句(狗具有看門的能力); 那麼我們在測試類的main函數當中(得先定義好對象Animal obj2 = new Dog() ),就不能用obj2.watchDoor(),即不能通過父類的引用調用子類的方法.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章