1. 程式人生 > 實用技巧 >JAVA的學習日記14

JAVA的學習日記14

Java封裝

  • 該露的露,該藏得藏

程式設計要追求“高內聚,低耦合”。高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;低耦合:僅暴露少量的方法給外部使用

  • 封裝

通常,應該禁止直接訪問一個物件中資料的實際表示,而應該通過操作介面來訪問,這成為資訊隱藏

屬性私有,get/set


package com.oop.Demo04;

//類 private:私有
public class Student {
    //屬性私有
    private String name;    //名字
    private int id;     //學號
    private char sex;   //性別
    private int age;    //年齡

    //因為加了private之後是私有的屬性,所以如果想要呼叫就要使用一些可以操作這個屬性的方法
    //所以提供了一些public的get、set方法

    /*
    封裝的意義:
        1.提高程式的安全性,保護資料
        2.隱藏程式碼的實現細節
        3,統一介面
        4.系統可維護增加了
     */

    //get   得到這個資料
    public String getName(){
        return this.name;
    }


    //set   給這個資料設定值
    public void setName(String name) {
        this.name = name;
    }

    //alt+insert快捷鍵生成

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age > 100 || age < 0){
            this.age = 5;
        }else{
            this.age = age;
        }

    }
}


/*
public static void main(String[] args) {
        Student student = new Student();
        student.setName("doudou");

        System.out.println(student.getName());

        student.setAge(-1); //不合法

        System.out.println(student.getAge());

    }
 */
  • 繼承
  • 繼承的本質是對某一批類的抽象,從而實現對現實世界更好地建模
  • extends的意識是“擴充套件”。子類是父類的擴充套件
  • Java中類只有單繼承,沒有多繼承!【即一個父類可以有多個子類,但一個子類只能有一個父類】
  • 繼承是類和類之間的一種關係。除此之外,類和類之間的關係還有依賴、組合、聚合等。
  • 繼承關係是兩個類,一個為子類(派生類),一個為父類(基類)。子類繼承父類,使用關鍵字extends來表示。
  • 子類和父類之間,從意義上來講應該具有“is a”的關係
  • object類,最基礎的類
  • super
  • 方法重寫
Application類:
package com.oop;

import com.oop.Demo03.Pet;
import com.oop.Demo05.Student;

//一個專案應該只有一個main方法
public class Application {
    public static void main(String[] args) {
        Student student = new Student();
//        student.say();
//        System.out.println(student.money);
        //student.test("豆豆");
        //student.test1();
    }
}


Person類:
package com.oop.Demo05;

//在Java中,所有的類,都預設直接或間接繼承object
//Person 人:父類
public class Person {
    //public
    //protected
    //default
    //private


    public Person() {
        System.out.println("Person構造器");
    }

    //    public int money = 10_0000_0000;
//
//    public void say(){
//        System.out.println("說了句話");
//    }
    protected String name = "cdoudou";
    public void print(){
        System.out.println("Person");
    }

}




Student類:
package com.oop.Demo05;

//學生 is 人:派生類,子類
//子類繼承了父類,就會擁有父類的全部方法!
public class Student extends Person{
    //ctrl+h    開啟關係樹的快捷鍵
    private String name = "doudou";

    public Student() {
        super();    //呼叫父類構造器,必須在子類構造器的第一行
        //後執行,說明有隱藏程式碼:呼叫了無參構造   即:super()這句程式碼呼叫了父類的程式碼
        System.out.println("Student構造器");
    }

    public void print(){
        System.out.println("Student");
    }

    public void test1(){
        print();    //Student
        this.print();   //Student
        super.print();  //Person
    }


    public void test(String name){
        System.out.println(name);   //豆豆
        System.out.println(this.name);//doudou
        System.out.println(super.name);//cdoudou
    }
}

super和this對比:

super注意點:
    1.super呼叫父類的構造方法,必須在構造方法的第一個
    2.super必須只能出現在子類的方法或者構造方法中!
    3.super和this不能同時呼叫構造方法!

對比 this:
    代表的物件不同:
        this:本身呼叫者這個物件
        super:代表父類物件的應用

    前提:
        this:沒有繼承也可以使用
        super:只能在繼承條件下才可以使用

    構造方法:
        this():本身類的構造
        super():父類的構造