Java之前期綁定,后期綁定,簡單理解和實例

開心一笑

【今天我對老公撒嬌:老公你夸夸我唄!老公面無表情的看看我,一言不發。我有點生氣,怎么遭,以前叫你夸我,你還會隨便敷衍幾句,現在連敷衍都不想了嗎?老公:隨便你怎么說,我只是覺得不配跟仙女說話!】

提出問題

java中的前期綁定,后期綁定如何理解???

解決問題

綁定:一個方法的調用與方法所在的類(方法主體)關聯起來。

前期綁定:final,static,private,構造方法,成員變量(包括靜態及非靜態)

后期綁定(多態):除了前期綁定之外的其他方法屬于后期綁定,運行時能判斷對象的類型進行綁定。

人類(Person):

/**
 * 描述:人類
 * @author Ay
 *
 */
class Person extends Object{

    protected String UNIQUE_FLAG = "Person";

    /** 心 **/
    private Heart heart;

    public Person(){
        System.out.println("Person created......");
    };

    public Person(String id,String name){
        super(id,name);
    }

    public Person(String name){
        super(name);
    }

    public Heart getHeart() {
        return heart;
    }

    public void setHeart(Heart heart) {
        this.heart = heart;
    }

    /**
     * 描述:購買
     * @param <E>
     * @return
     */
    public static <E> List<E> buy(E arg,int num){
        return MagicStore.get(arg,num);
    }

    public static void birth(){
        System.out.println("降臨人世間......");
    }

    public static void die(){
        System.out.println("走向人間天堂......");
    }

    public void breath(){
        System.out.println("Person" + "呼吸......");
    }
}

男孩(Boy):

/**
 * 描述:男孩
 * @author Ay
 *
 */
class Boy extends Person{

    protected String UNIQUE_FLAG = "Boy";

    /** 男孩的心 **/
    private Heart heart;

    public Boy(){
        System.out.println("Boy created......");
    }

    public Boy(String name){
        super(name);
    }

    Boy(String id,String name){
        super(id, name);
    }

    public static void birth(){
        System.out.println("Boy" + "降臨人世間......");
    }

    public static void die(){
        System.out.println("Boy" + "走向人間天堂......");
    }

    @Override
    public void breath(){
        System.out.println("Boy" + "呼吸......");
    }
}

測試類:

public class AyTest {

    public static void main(String[] args){
        
        //男孩產生,用Person引用,打印 1和2結果
        Person boy = new Boy();
        //男孩出生,由于birth是靜態方法,是前期綁定,所以調用person的birth方法
        boy.birth();
        //final常量也是前期綁定,所以調用父類Person的UNIQUE_FLAG常量
        System.out.println(boy.UNIQUE_FLAG);
        //breath是后期綁定,所以調用boy的breath方法
        boy.breath();
        //編譯報錯,訪問權限的原因
        boy.heart;
    }

}

打印結果:

Person created......  1
Boy created......     2
降臨人世間......       3
Person                4
Boy呼吸......         5

參考文章

【1】理解Java中的前期綁定和后期綁定

【2】Java前期(靜態)綁定和后期(動態)綁定

【3】Java的前期綁定和后期綁定[新]

【4】Java編程思想(Thinking in Java)

讀書感悟

《寫在人生邊上》錢鐘書

  • 我們在創作中,想象力常常貧薄可憐,而一到回憶時,不論是幾天還是幾十年前、是自己還是旁人的事,想象力忽然豐富得可驚可喜以致可怕。
  • 早熟的代價是早衰。
  • 永遠快樂”這句話,不但渺茫得不能實現,并且荒謬得不能成立。快過的決 不會永久;我們說永遠快樂,正好像說四方的圓形,靜止的動作同樣地自相矛盾。 在高興的時候,我們空對瞬息即逝的時間喊著說:“逗留一會兒罷!你太美了!” 那有什么用?你要永久,你該向痛苦里去找。
  • 洗一個澡,看一朵花,吃一頓飯,假使你覺得快活,并非全因為澡洗得干凈,花開得好,或者菜合你口味,主要因為你心上沒有掛礙。

其他

如果有帶給你一絲絲小快樂,就讓快樂繼續傳遞下去,歡迎點贊、頂、歡迎留下寶貴的意見、多謝支持!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容