Java基礎之理解封裝,繼承,多態三大特性

目錄java

封裝

封裝隱藏了類的內部實現機制,能夠在不影響使用的狀況下改變類的內部結構,同時也保護了數據。對外界而已它的內部細節是隱藏的,暴露給外界的只是它的訪問方法。ide

代碼理解

public class Student {

    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

核心要點

  • 數據是私有的
  • 獲取只能經過getter方法
  • 更改只能經過setter方法

注意要點

  • getter方法禁止返回可變對象的引用,可變對象引用會破壞封裝(下面演示錯誤的使用封裝方法)this

    public class Student {
    
        public Student(Date birthday) {
            this.birthday = birthday;
        }
    
        private Date birthday;
    
        public Date getBirthday() {
            return birthday;
        }
    
        public void setBirthday(Date birthday) {
            this.birthday = birthday;
        }
    }
    
    class Main{
        public static void main(String[] args) {
            Student student = new Student(new Date());
            System.out.println("student對象的Date:"+student.getBirthday());//student對象的Date:Tue Dec 11 10:50:50 CST 2018
            Date birthday = student.getBirthday();
            birthday.setTime(888888888);
            System.out.println("student對象的Date:"+student.getBirthday());//student對象的Date:Sun Jan 11 14:54:48 CST 1970
        }
    }

繼承

經過繼承建立的新類稱爲「子類」或「派生類」,被繼承的類稱爲「基類」、「父類」或「超類」。繼承的過程,就是從通常到特殊的過程。繼承概念的實現方式有二類:實現繼承與接口繼承。實現繼承是指直接使用基類的屬性和方法而無需額外編碼的能力;接口繼承是指僅使用屬性和方法的名稱、可是子類必須提供實現的能力;編碼

代碼理解

public class Student extends People {

}

class People{
    void sayHello(){
        System.out.println("Hello Word");
    }

}

class Main{
    public static void main(String[] args) {
        Student student = new Student();
        student.sayHello();
    }
}

核心要點

  • 子類會繼承父類的非private的屬性和方法
  • 能夠在子類構造器中使用super關鍵字對父類private私有與域進行初始化
  • 在類的繼承層次中能夠使用abstract定義抽象類做爲派生其餘類的基類
    • 包含一個或者多個的抽象方法必須聲明爲抽象類
    • 抽象類不能夠被實例化
    • 子類實現全部的抽象方法後再也不是抽象類
    • 抽象類的層次中能夠使用多態既抽象類對象變量引用非抽象類子類實例

多態

一個對象變量能夠指向多種實際類型的現象被成爲多態;在運行時可以自動選擇調用那個方法被稱爲動態綁定.code

代碼理解

public class Student extends People {
    @Override
    void sayHello(){
        System.out.println("I am a Student");
    }
    void studentHello(){
        System.out.println("It is student Say");
    }
}
class Teacher extends People{
}
class People{
    void sayHello(){
        System.out.println("Hello Word");
    }
}
class Main{
    public static void main(String[] args) {
        People people1 = new Teacher();
        People people2 = new Student();
        people1.sayHello();
        people2.sayHello();
        ((Student) people2).studentHello();
    }
}

核心要點

  • 要實現多態必須存在繼承關係(student和teacher都繼承people)對象

  • 子類須要將父類的方法重寫(繼承已經默認重寫),若是重寫了父類方法則會使用重寫方法繼承

  • 須要將子類的引用賦值給父類,這樣父類變量就能夠調用非子類特有方法接口

  • 父類引用不能夠賦值給子類變量,若是必須須要;能夠使用強制類型轉換,強制類型轉換會暫時忽略對象的實際類型,使用對象的所有功能get

    Student student = (Student) new People();
相關文章
相關標籤/搜索