1. 程式人生 > 其它 >Java面向物件02:封裝和繼承

Java面向物件02:封裝和繼承

Java面向物件02:封裝和繼承

封裝

該露的露,該藏的藏

  • 我們程式設計要追求“高內聚,低耦合” 。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合就是僅暴露少量的方法給外部使用。
  • 封裝(資料的隱藏):通常,應禁止直接訪問一個物件中資料的實際表示,而應通過操作介面來訪問,這稱為資訊隱藏。
  • 總之,屬性私有,get/set
  • 封裝的必要性
    • 提高程式的安全性,保護資料
    • 隱藏程式碼的實現細節
    • 統一介面
    • 提升系統的可維護性
  • 建立私有屬性:private 資料型別 變數名 = 變數值;
  • 建立set/get方法的快捷鍵 Alt + Insert

例項:

Application類:

package com.lurenj.oop;

import com.lurenj.oop.demo04.Student;
/*
    封裝的必要性
    1.提高程式的安全性,保護資料
    2.隱藏程式碼的實現細節
    3.統一介面
    4.增加系統可維護性
 */

public class Application {
    public static void main(String[] args) {
        Student student = new Student();
        student.setName("lurenj");
        System.out.println(student.getName());

        student.setAge(999);//不合法的
        System.out.println(student.getAge());
    }
}

Student類:

package com.lurenj.oop.demo04;

//類 private:私有
public class Student {

    //屬性私有
    private String name;//名字
    private int id;//學號
    private int age;//年齡
    private char sex;//性別

    //提供一些可以操作這個屬性的方法
    //public 的 get、set 方法
    //通過 get 方法獲得這個資料
    public String getName(){
        return this.name;
    }

    //通過 set 方法給資料設定值
    public void setName(String name){
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if (age > 120 || age < 0){

            this.age = 3;
        }else {
            this.age = age;
        }

    }

}

繼承

  • 繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模,私有的東西無法被繼承,無論是變數還是方法,private修飾符

  • extends的意思是“擴充套件”。子類是父類的擴充套件。

  • JAVA中類只有單繼承,沒有多繼承,一個兒子只能夠有一個爸爸,

  • 繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等

  • 繼承關係的兩個類,一個為子類(派生類),一個為父類(基類)。子類繼承父類,使用關鍵字extends來表示

  • 子類和父類之間,從意義上講應該具有“is a”的關係,IDEA檢視繼承樹繼承快捷鍵:Ctrl + H

  • object類,在JAVA中,所有的類,都預設直接或間接繼承object類

  • super

    • super呼叫父類的構造方法,必須在構造方法的第一個執行

    • super 必須只能出現在子類的方法或者構造方法中

    • super 和 this 不能同時呼叫構造方法

    • this和super的不同點

      • this:引用當前物件

        super:引用父類物件

      • this:沒有繼承情況也能使用

        super:只能在繼承條件下才能使用

      • 構造方法中this呼叫本類的構造

        呼叫super父類的構造

  • 方法重寫

    1. 需要有繼承關係,子類重寫父類的方法,子類的方法和父類必須一致,方法體不同!
    2. 方法名必須相同
    3. 引數列表必須相同
    4. 修飾符:範圍可以擴大,但不能縮小 public > protected > default > private
    5. 丟擲的異常:範圍可以被縮小,但不能擴大; ClassNotFoundException < Exception
    6. IDEA建立重寫快捷鍵:Alt + Insert;選擇 override;
    7. 重寫都是方法的重寫,和屬性無關
    • 為什麼需要重寫?
      • 父類的功能,子類不一定需要,或者不一定滿足

    父類:

    package com.lurenj.oop.demo05;
    
    //重寫都是方法的重寫,和屬性無關
    public class B {
        public void test(){
            System.out.println("B=>test()");
        }
    }
    
    

    子類:

    package com.lurenj.oop.demo05;
    //繼承
    public class A extends B{
        //Override 重寫
        @Override //註解:有功能的註釋
        public void test() {
            System.out.println("A=>test()");
        }
    }