面向對象的三大特徵

面向對象的三大特徵:

封裝、繼承、多態

一.封裝:屬性私有化,對外提供統一訪問的get/set方法。完全封裝。基本類型只能按值傳遞,而每個基本類型對應的封裝類是按引用傳遞的。裝類的出現,是爲了更方便的使用一些基本類型不具備的方法,比如valueOf(),toString()等等。還有你如果想傳遞一個int對象的引用,而不是值,那隻能用封裝類。

public class Pet {
    int age;// 屬性私有 封裝的要求
    String name;
    // alt + shift + s
    public Pet(){
        this(20,"張飛");
    }
                          
    public Pet(int age,String name){
        this.age = age;
        this.name = name;
    }
                          
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
                          
    public void pritn(){
        System.out.println(this);
    }
}

二.繼承:

Student(name,age,sid);

Teacher(name,age,tid);

Super(name,age);

繼承的好處:

1. 代碼的複用。

2. 爲了以後多態的使用。

繼承來的東西:

1. )一般的屬性和方法被繼承。

2. )構造方法不被繼承。

3. )私有的方法不被繼承。

4. )私有的屬性被隱藏,可以通過繼承來的公有方法訪問。

什麼時候建立父子類關係:

任何A出現的地方,換做B之後仍然成立,或者說:

B is a A : 如果符合這個公式,就可以建立父子類關係。

父類:

public abstract class Super {
    static{
        System.out.println("父類靜態語句塊");
    }
    public Super(){
        System.out.println("父類構造方法");
    }
    public abstract void test();
}

子類:

public  class Sub extends Super{
    static{
        System.out.println("子類靜態語句塊");
    }
    public Sub(){
        super();
        System.out.println("子類構造方法");
    }
    public void test(){
        System.out.println("實現");
    }
}

*.對於構造方法來說:

構造方法的第一行不是super(..)就是this(..)

如果一個構造方法第一行不是this(..)super(..),則默認是對父類無參構造的調用super();

不可能所有的構造都是this(..),至少有一個是super(..);

在子類中使用和父類中同樣名字的屬性沒有意義,對實際開發沒有任何好處,所以應該避免。

如果子類中有和父類名字相同的方法

1. 如果參數不同:構成了重載。

2. 如果參數相同:構成了重寫。

重寫:覆蓋 覆寫。

1. 發生在父子類中。

2. 同名同參同返回。

3. 子類方法的修飾符不能比父類方法的修飾符更封閉。(要麼相同,要麼更開放)

private默認protectedpublic

4. 子類方法拋出的異常不能比父類方法拋出的異常更寬泛。

重載:

1. 發生同一類中

2. 同名不同參。參數個數不同、參數順序不同、參數類型不同均構成重載。

3. 返回值類型沒有要求。

如果一個類沒有指定繼承其他父類,則它的父類是Object

this指本類對象。

super用法:指父類對象

三.多態:一個對象,多種狀態。父類引用指向子類的對象

多態兩點基本定理:

1. 發生多態時,只能調用父類的方法,不能調用子類的方法。

2. 發生多態時,如果子類中重寫了父類的方法,再調用這個方法,調用的是子類重寫之後的方法。

3. 想使用子類中獨有的方法,需要使用強制類型轉換

4. 注意:強制類型轉換沒有新建對象,只是換了一個引用。

對於靜態方法來說,有重寫,重寫也應該是靜態的。靜態方法是跟類一致的,沒有多態。

多態經常用傳遞的參數的類型和返回類型

public class Test {
    public static void main(String[] args) {
        Super s = new Sub();// 多態形式。
//      s.test();
        /*  靜態>一般  父類>子類
         *  父類靜態語句塊
            子類靜態語句塊
            父類構造方法
            子類構造方法
         */
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章