Java基礎語法(10)-面向對象之三大特徵
- 2020 年 4 月 2 日
- 筆記
title: Java基礎語法(9)-面向對象之類的成員
blog: CSDN
data: Java學習路線及影片
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()); } }
- 四種訪問許可權修飾符
Java許可權修飾符public、protected、(預設)、private置於類的成員定義前,用來限定對象對該類成員的訪問許可權。
修飾符 | 類內部 | 同一個包 | 不同包的子類 | 同一個工程 |
---|---|---|---|---|
private | Yes | |||
(預設) | Yes | Yes | ||
protected | Yes | Yes | Yes | |
public | Yes | Yes | Yes | Yes |
對於class的許可權修飾只可以用public和default(預設)。
public類可以在任意地方被訪問
default類只可以被同一個包內部的類訪問
2.面向對象特徵–繼承
- 為什麼要有繼承?
多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承那個類即可。
此處的多個類稱為子類(派生類),單獨的這個類稱為父類(基類或超類)。可以理解為:「子類 is a 父類」
- 類繼承語法規則:
class Subclass extends SuperClass{ }
- 作用:
- 繼承的出現減少了程式碼的冗餘,提高程式碼的復用性
- 繼承的出現,更有利於功能的擴展
- 繼承的出現讓類與類之間產生了關係,提供了多態的前提。
- 規則:
- Java只支援單繼承和多層繼承,不允許多重繼承
- 一個子類只能有一個父類
- 一個父類可以派生出多個子類
- 單繼承與多層繼承舉例
3.面向對象特徵-多態性
- 多態的作用
- 父類的引用指向子類的對象
- 規則
- 編譯時,看左邊;運行時,看右邊。
- 向上轉型
- 在Java中,子類的對象可以替代父類的對象使用
Person p = new Student(); Object o = new Person(); //Object類型的變數o,指向Person類型的對象 o = new Student(); //Object類型的變數o,指向Student類型的對象
- 子類可看做是特殊的父類,所以父類類型的引用可以指向子類的對象:向上轉型(upcasting)。
- 動態綁定
- 編譯時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(); }
- instanceof關鍵字
-
作用:用來判斷某個對象是否屬於某種數據類型。
-
注意: 返回類型為布爾類型
Fu f1=new Zi(); Fu f2=new Son(); if(f1 instanceof Zi){ System.out.println("f1是Zi的類型"); } else{ System.out.println("f1是Son的類型"); }
- 向下轉型
- 一個已經向上轉型的子類對象可以使用強制類型轉換的格式,將父類引用類型轉為子類引用各類型
- 子類類型 變數名=(子類類型) 父類類型的變數;
public class Main { public static void main(String[] args) { Person person = new Superman(); Superman s = (Superman)person; //向下轉型 s.sleep(); s.fly(); s.eat(); } }
4.結語
2020-3-31: Java基礎語法(8)-數組中的常見排序演算法
2020-3-31: Java基礎語法(9)-面向對象之類的成員
-
今日好文推薦
-
今日資料推薦