Java基礎語法(10)-面向對象之三大特徵

title: Java基礎語法(9)-面向對象之類的成員

blog: CSDN

data: Java學習路線及影片

1.面向對象特徵–封裝

  1. 為什麼需要封裝?封裝的作用和含義?

我要用洗衣機,只需要按一下開關和洗滌模式就可以了。有必要了解洗衣機內部的結構嗎?有必要碰電動機嗎?

我要開車,…

隱藏對象內部的複雜性,只對外公開簡單的介面。便於外界調用,從而提高系統的可擴展性、可維護性。通俗的說,把該隱藏的隱藏起來,該暴露的暴露出來。這就是封裝性的設計思想。

  1. 資訊的封裝和隱藏

Java中通過將數據聲明為私有的(private),再提供公共的(public)方法:

getXxx()和setXxx()實現對該屬性的操作

class Animal {  private int legs;   // 將屬性legs定義為private,只能被Animal類內部訪問  public void setLegs(int i) {  if (i != 0 && i != 2 && i != 4) {  	System.out.println("Wrong number of legs!");  	return;  	}  	legs = i;  }  public int getLegs() {  	return legs;  	}  }  
public class Zoo {  public static void main(String args[]) {      Animal xb = new Animal();      xb.setLegs(4); //  	System.out.println(xb.getLegs());  	}  }  
  1. 四種訪問許可權修飾符

Java許可權修飾符public、protected、(預設)、private置於類的成員定義前,用來限定對象對該類成員的訪問許可權。

修飾符 類內部 同一個包 不同包的子類 同一個工程
private Yes
(預設) Yes Yes
protected Yes Yes Yes
public Yes Yes Yes Yes

對於class的許可權修飾只可以用public和default(預設)。

public類可以在任意地方被訪問

default類只可以被同一個包內部的類訪問

2.面向對象特徵–繼承

  1. 為什麼要有繼承?

多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。

此處的多個類稱為子類(派生類),單獨的這個類稱為父類(基類或超類)。可以理解為:「子類 is a 父類」

  1. 類繼承語法規則:

class Subclass extends SuperClass{ }

  1. 作用:
  • 繼承的出現減少了程式碼的冗餘,提高程式碼的復用性
  • 繼承的出現,更有利於功能的擴展
  • 繼承的出現讓類與類之間產生了關係,提供了多態的前提。
  1. 規則:

GYa8Fe.png

  • Java只支援單繼承和多層繼承,不允許多重繼承
  • 一個子類只能有一個父類
  • 一個父類可以派生出多個子類
  1. 單繼承與多層繼承舉例

GYdYAU.png

3.面向對象特徵-多態性

  1. 多態的作用
  • 父類的引用指向子類的對象
  1. 規則
  • 編譯時,看左邊;運行時,看右邊。
  1. 向上轉型
  • 在Java中,子類的對象可以替代父類的對象使用
Person p = new Student();  Object o = new Person();   //Object類型的變數o,指向Person類型的對象  o = new Student();         //Object類型的變數o,指向Student類型的對象  
  • 子類可看做是特殊的父類,所以父類類型的引用可以指向子類的對象:向上轉型(upcasting)。
  1. 動態綁定
  • 編譯時e為Person類型,而方法的調用是在運行時確定的,所以調用的是Student類的getInfo()方法
public class Test {  public void method(Person e) {  	e.getInfo();  }  public static void main(Stirng args[]) {  	Person e = new Person();  	e.getInfo();  }  
  1. instanceof關鍵字
  • 作用:用來判斷某個對象是否屬於某種數據類型。

  • 注意: 返回類型為布爾類型

	   Fu f1=new Zi();          Fu f2=new Son();          if(f1 instanceof Zi){              System.out.println("f1是Zi的類型");          }          else{              System.out.println("f1是Son的類型");          }  
  1. 向下轉型
  • 一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用類型轉為子類引用各類型
  • 子類類型 變數名=(子類類型) 父類類型的變數;
public class Main {      public static void main(String[] args) {          Person person = new Superman();          Superman s = (Superman)person;   //向下轉型          s.sleep();          s.fly();          s.eat();      }  }  

4.結語

8qXr3n.png

2020-3-31: Java基礎語法(8)-數組中的常見排序演算法

2020-3-31: Java基礎語法(9)-面向對象之類的成員