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

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

blog: CSDNjava

data: Java學習路線及視頻算法

1.面向對象特徵--封裝

  1. 爲何須要封裝?封裝的做用和含義?

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

我要開車,…學習

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

  1. 信息的封裝和隱藏

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

getXxx()和setXxx()實現對該屬性的操做3d

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置於類的成員定義前,用來限定對象對該類成員的訪問權限。code

修飾符 類內部 同一個包 不一樣包的子類 同一個工程
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)-面向對象之類的成員

相關文章
相關標籤/搜索