簡體   English   中英

java - 如何從繼承的類中調用同名函數

[英]How to call function with same name from an inherited class in java

我是 Java 新手,我記得在 C++ 中,我們做了類似CLASSNAME::Fn()事情來避免繼承中的歧義。

這是我的代碼,我希望在兩個類中都有相同的顯示方法並顯式訪問它們。

public class Main {
    public static void main(String args[]){
    Emplo e = new Emplo("samuel",19,"designer",465);
    e.display();  // here i want to call both display()
    }
}

public class Person {
    String name;
    int age;

    Person(String s, int a){
        name = s;
        age = a;
    }

    public void dispaly(){
        System.out.println("name: "+name+"\nage: "+age);
    }
}


public class Emplo extends Person {
    String desg;
    double sal;
    Emplo(String s,int a,String d, double sa){
        super(s,a);
        desg=d;
        sal=sa;
    }
    void display(){
        System.out.println("desg: "+desg+"\nsal: "+sal);
    }
}

在java中,不能不調用實例的類的具體方法實現。

也就是說,您不能“繞過”子類方法並調用該方法的超類版本; 調用超類方法只能子類中使用super.someMethod()

你甚至不能調用一個超級超級類的版本,即你不能做類似super.super.someMethod()事情

在第二個顯示方法中,使用 super 關鍵字調用超類顯示方法: super.display(); (應該是方法的第一個語句)

並且不會有歧義,因為將調用其對象正在創建的 display 方法,這意味着在這種情況下將調用 Employee 的 display() 方法

因此,如果要調用 Person 類的顯示方法,則應創建該類的對象並按該類類型進行引用,例如:

人 p = 新人(您的數據); p.display() // 這里會調用person的display方法
不,你不能從同一個引用調用這兩種方法

在您的Emplodisplay()方法super.dispaly()表示直接超類即Person類的display()方法。

 void display(){   // here in Emplo class you can't give more restrictive modifier(i.e  `public` to     `default`. since in `Person` class it is `public` so it must be `public`.(overriding rule)
        super.dispaly();
        System.out.println("desg: "+desg+"\nsal: "+sal);
    }

所以把public修飾符放在這里:

  public void display(){
       super.dispaly();
        System.out.println("desg: "+desg+"\nsal: "+sal);
  }

`

首先在這里你使用兩種不同的方法。 Emplo display()Person中的Emplo dispaly() 所以沒有必要談論歧義或overriding使之正確。

假設你被糾正了。 那么你不能編碼保持這種方式

public void display(){ // method in Person
    System.out.println("name: "+name+"\nage: "+age);
} 

然后

void display(){ // method in Emplo
    System.out.println("desg: "+desg+"\nsal: "+sal);
}

您正在使用較弱的修飾符來override ,因此您無法編譯此代碼。 您可以在Emplo public該方法。

並回答你的最后一個問題。 你不能這樣做。 不能同時調用這兩種方法。

也許這可以回答您的問題:

public void myMethod()
{   //inherited method
    super.myMethod(); //calls base class method
    //...    add more code to inherited method
}

有關詳細信息,請參閱原始來源: 在 Java 中,如何從派生類中的覆蓋方法調用基類的方法?

暫無
暫無

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

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