[英]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方法
不,你不能從同一個引用調用這兩種方法
在您的Emplo
類display()
方法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.