程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java中Animal b = new Dog();Dog c = new Dog();的區別

Java中Animal b = new Dog();Dog c = new Dog();的區別

編輯:關於JAVA

Java中Animal b = new Dog();Dog c = new Dog();的區別。本站提示廣大學習愛好者:(Java中Animal b = new Dog();Dog c = new Dog();的區別)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中Animal b = new Dog();Dog c = new Dog();的區別正文


由於在編譯階段,只是反省參數的援用類型。但是在運轉時,Java虛擬機(JVM)指定對象的類型並且運轉該對象的辦法。因而在上面的例子中,b.move()之所以能編譯成功,是由於Animal類中存在move辦法,所以編譯成功,但是運轉時,運轉的是特定對象的辦法,即運轉的是Dog類的move辦法。而對Dog c而言,編譯階段首先是去Dog中查找bark(),因而能編譯成功,同時也能運轉成功;但是關於b.bark()而言,首先是去Animal類中尋覓bark(),由於找不到,因此編譯錯誤。

public class JavaOverrideOverload {
    public static class Animal {
        public void move() {
            System.out.println("植物可以挪動");
        }
    }

    public static class Dog extends Animal {
        public void move() {
            System.out.println("狗可以跑和走");
        }

        public void bark() {
            System.out.println("狗可以吠叫");
        }
    }

    public static void main(String args[]) {
        Animal a = new Animal(); // Animal 對象
        Animal b = new Dog(); // Dog 對象
        Dog c = new Dog();
        a.move();// 執行 Animal 類的辦法
        b.move();// 執行 Dog 類的辦法
        b.bark();
        c.bark();

    }

}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved