Java的以下片段是否正確?在正面情況下,方法fie
被重新定義(重寫)?它打印什麼?Java的以下片段是否正確?
class A {
int x = 4;
int fie (A p) { return p.x;}
}
class B extends A {
int y = 6;
int fie (B p) { return p.x + p.y;}
}
B b = new B();
A a = new A();
int zz = a.fie(a) +b.fie(a); //here,b.fie(a)---how is this working?
System.out.println(zz);
請幫我回答這個問題。我正在開發OOP繼承,但我仍然不明白爲什麼沒問題。我已經在Eclipse上測試過它,它工作正常。它打印出14.我想這裏沒有覆蓋。但是傳入參數爲ac
(類型A)時,B類中的方法fie(B p) {...}
如何訪問p.y
?
乙延伸的,並具有兩個INT FIE(的p )和fie(B p)。所以多態性導致這個工作。你實際上並不是壓倒fie(A a),我想你是打算這樣做的。 – 2014-09-05 11:56:35
此代碼打印8,而不是14.如果打印14,則不會運行您發佈的代碼。 'b.fie(a)'在類A中調用'int fie(A p)',這個類繼承了B類。 – nos 2014-09-05 11:58:03
我想知道它爲什麼會打印14,它會打印8.同樣的B類方法不是重寫A類方法 – 2014-09-05 11:58:54