JAVA的學習日記14
阿新 • • 發佈:2020-09-18
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():父類的構造