程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> java-JAVA 多態遇到的題目,求解釋

java-JAVA 多態遇到的題目,求解釋

編輯:編程解疑
JAVA 多態遇到的題目,求解釋

特別是a2.show( )輸出的結果不理解。求大神指點第一次提問

  class A {
    public String show(D obj) {
        return ("a and d");
    }
    public String show(A obj){
        return "a and a";
    }
}
class B extends A{

    public String show(A obj){
        return "b and a";
    }   
    public String show(B obj){
        return "b and b";
    }
}
class C extends B{}
class D extends B{}
public class Test1{
public static void main(String[] args){
    A a1=new A();
    A a2=new B();
    B b=new B();
    C c=new C();
    D d=new D();
    System.out.println(a1.show(b));
    System.out.println(a1.show(c));
    System.out.println(a1.show(d));
    System.out.println(a2.show(b));
    System.out.println(a2.show(c));
    System.out.println(a2.show(d));
    System.out.println(b.show(b));
    System.out.println(b.show(c));
    System.out.println(b.show(d));
}
}

最佳回答:


圖片說明

 a2.show(b): b and a
a2.show(c): b and a
a2.show(d): a and d

首先看著內存的布局圖理解,首先a2的實在是一個對象B,但是由於a2是當作A來new的,所以a2指向的只是B中的A,它看不到B的方法的,
對於傳入一個b來說,b是B的一個實例,我們看A中show方法的參數沒有是B的,由於B是一個A,所以找父類,當成一個A傳進去,注意,我們new的時候,new出來的實質是個B,B對A中的方法show(A)方法進行了重寫(此時B有三個方法),所以直接調用B的show(A)方法,打印出“b and a",
第二第三個類似,只有內存布局畫出來了,就好理解了!比如第二個c也是當成A傳進去的(c是一個A),d直接傳進去,A中有方法對應,只要第一個理解了,其他都是一樣的!

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