簡體   English   中英

Java Inheritance:子類中的方法覆蓋超類中的方法

[英]Java Inheritance: method in subclass overrides method in superclass

這是上下文:有 2 個類: PersonStudent extends Person

class Person 有 1 個方法: print(Person x) {System.out.println("Person")} (1)

class 學生有兩種方法:
print(Student x) {System.out.println("Student")} (2)

print(Person x) {System.out.println("Override")} (3)

然后我有:

Person p = new Student();
Student s = new Student();
p.print(s); // prints 'Override' (*)

我從講座中得到的解釋是:因為聲明類型是Person,所以編譯器會選擇方法(1)。 但是運行時類型是Student,所以方法(3)覆蓋了它。
我的問題是:為什么方法(2)沒有覆蓋? 這里的參數類型是 Student(從 (*) 行開始),方法 (2) 應該是最重要的嗎?

非常感謝你們。 我感謝你所有的答案

多態性.. print 調用路由到 Student 而不是 Person 的原因是 print (S) 駐留在 Student 而不是 person 中。 在打印方法被覆蓋的學生中,有更廣泛的參考 >Print(P),因此 print(p) 比 print(s) 被執行。 您將在異常處理中看到這種情況。

您看到“Override”的原因是因為“p”被定義為“Person”類型的 Object,並且對 Student class 中包含的其他方法一無所知,即使它使用 Student 構造函數。 “Student()”作為 print 方法的參數的原因是因為 Student 是 Person 的子類,並且至少包含 Person object 的所有信息。 但是,由於“p”被定義為“學生”object,它將使用重寫的打印方法,而不是來自 Person class 的方法。 此外, print(Person) 和 print(Student) 的簽名不同,因此 Student class 不會將第二個 print(Student) 方法視為替代方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM