1. 程式人生 > 其它 >第11天 構造器、建立物件記憶體分析、三大特徵之封裝、繼承

第11天 構造器、建立物件記憶體分析、三大特徵之封裝、繼承

構造器詳解

package com.oop.Demo02;
//java----->class
public class Person {
    String name;
    int age;

    //例項化初始值
    //1.使用new關鍵字,本質實在呼叫構造器,必須要有構造器
    //2.用來初始化值

    public Person() {
    }

    //有參構造:一旦定義了有參構造,無參就必須顯示定義

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //alt+insert
}

/*
    public static void main(String[] args) {
        //例項化一個物件
        Person person = new Person("kuangshen",23);
        System.out.println(person.name);//null

    }
--------------------------------------------------
    構造器
        1.和類名相同
        2.沒有返回值
    作用:
        1.new 本質是呼叫構造器
        2.初始化物件的值
    注意點:
        1.定義有參構造之後,如果使用無參構造,
        顯示的定義一個無參的構造
    快捷鍵:
        Alt  + insert
    this.*  =  引數傳進來的值    
    
 */



3.建立物件記憶體分析

繪製記憶體分析圖

public class Pet {
    public String name;
    public int age;
    //無參構造
    public void shout(){
        System.out.println("叫了一聲!");
    }
}

/*
    public static void main(String[] args) {
        Pet dog = new Pet();
        dog.name="旺財";
        dog.age=3;
        dog.shout();

        System.out.println(dog.name);
        System.out.println(dog.age);

        Pet cat = new Pet();
        //面向物件06:建立物件記憶體分析
    }
 */

簡單小結--類與物件

 public static void main(String[] args) {
    /*
    1.類與物件
        類是一個模板:抽象   物件是一個具體的例項
    2.方法
        定義、呼叫
    3.物件的引用
        引用型別:基本型別(8大基本型別)
        物件是通過引用來操作的:棧--->堆
    4.屬性:欄位Filed  或者成員變數
        預設初始化:
            數字:0  0.0
            char:u0000
            Boolean:false
            引用:  null
        修飾符   屬性型別   屬性名  =屬性值;
    5.物件的建立和使用:
        -必須使用new關鍵字建立物件,必須使用構造器   Person kuangshen =new Person(); 
        -物件的屬性  kuangshen.name;
        -物件的方法  kuangshen.sleep;
    6.類:
        靜態的屬性   ----屬性
        動態的行為   ----方法
        
    下一步學習封裝、繼承、多型!!!!
     */
    }

提醒自己:總結下,前面基礎必須掌握牢固,不然越欠越多,別放棄!加油!
  1. 面向物件的三大特徵

封裝

  • 該露的露,該藏的藏
    • 我們程式設計要求“高內聚,低耦合”
      • 高內聚就是類的內部資料操作細節自己完成,不允許外部干涉;
      • 低耦合就是僅暴漏少量的方法給外部使用
  • 封裝(資料的隱藏)
    • 通常,應禁止直接訪問一個物件中的資料的實際表示,而應通過操作介面來訪問,這成為資訊隱藏
  • 記住這句話就夠了:屬性私有 get/set
package com.oop.Demo04;
//類 private:私有
public class Studernt {
    //屬性私有

    private String name;    //名字
    private int id;    //學號
    private char sex;    //性別
    private int age;

    //提供一些可以操作這個屬性的方法
    //必須提供一些public的get  set方法

    //get 獲得這個資料或屬性
    public String getName(){
        return this.name;
    }
    //set 給這個資料設定值
    public void setName(String name){
        this.name = name;
    }
    //快捷鍵  Alt+Insert  也可以自動生成get set

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if (age>120||age<0){
            this.age = 3;
        }else {
            this.age = age;
        }
    }
}

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

/*
public class Application {
    public static void main(String[] args) {
        Studernt s1 = new Studernt();
        s1.setName("秦始皇");

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

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


繼承

  • 繼承的本質是對某一批類的抽象,從而實現對現實世界更好的建模
  • extends的意思是“擴充套件”,子類是父類的擴充套件。
  • java中類只有單繼承,沒有多繼承!一個兒子只能有一個爸爸吧,但一個爸爸可以有多個兒子
  • 繼承是類和類之間的一種關係,除此之外,類和類之家的關係還有依賴、組合、聚合等
  • 繼承關係的兩個類,一個為子類(派生類),一個是父類(基類)。子類繼承父類,使用關鍵字extends來表示。
  • 子類和父類之間,從意義上將應該具有“is a“的關係
  • object類
  • super
  • 方法重寫
opp.demo05中的person----> teacher  
    			   ----> student