[英]Java: Why is the parent class methods visible to the derived class?
class Base {
public void display(int n){
System.out.println(n);
}}
class Derived extends Base{
public void display(){ //Line-1
System.out.println("display overloaded");
}}
public class Tester {
public static void main(String[] args){
Derived ref = new Derived();
ref.display(10); //Line-2
}}
為什么這段代碼有效?父類方法如何對子類可見和可用? 第 2 行不應該拋出一個錯誤,說沒有這樣的方法或者定義的方法不應該有任何參數。
這些是不同的方法,要覆蓋一個方法,您必須具有相同的方法簽名
@Override
public void display(int n){
System.out.println("display overloaded");
}
還添加@Override
以指示您正在覆蓋基本方法
注意你不能真正刪除一個方法,只是覆蓋它(或重載作為你的例子)
在 java 中,所有具有public
和protected
訪問修飾符的方法和變量都是從父類繼承到子類的。 由於您的輸入參數為 int display(int n)
的顯示方法也從父類Base
繼承到Derived
。 結果方法也可用於基類。
當您在沒有參數display()
Derived
類中創建 display 方法時,您實際上是在使用方法重載概念(而不是覆蓋)。 因此,在您的Derived
類中,實際上您有兩個具有相同名稱(不同參數) display()
和display(int n)
。
這就是為什么你沒有得到這樣的方法或者定義的方法不應該有任何參數。
派生的方法覆蓋了其超類中的方法,但它沒有接受任何參數,但是您向派生的子類提供了一個參數,因此它會找到哪個方法正在接受一個參數,並且它找到了,這就是它沒有給出錯誤的原因
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.