我是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);
}
}
答案 0 :(得分:0)
在第二种显示方法中,使用super keywod调用超类显示方法: super.display(); (应该是该方法的第一个陈述)
并且不存在歧义,因为将调用其对象正在创建的显示方法,这意味着在这种情况下将调用Employee的display()方法
所以如果你想调用Person类的display方法,你应该创建该类的对象并通过该类类型引用,如:
人p =新人(您的数据);
p.display()//这里将调用person的显示方法
并且不,你不能从同一个参考文件中调用这两个方法
答案 1 :(得分:0)
在java中,你不能不调用实例类的特定方法实现。
也就是说,你不能绕过"一个子类方法并调用该方法的超类版本;调用超类方法只能使用super.someMethod()
从在子类中完成。
您甚至无法调用超级超级版本,即您无法执行类似super.super.someMethod()
答案 2 :(得分:0)
在Emplo
班级display()
方法中,super.dispaly()
表示display()
即时超类的方法,即Person
类。
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);
}
`
答案 3 :(得分:0)
首先,你在这里使用两种不同的方法。 display()
中的Emplo
和dispaly()
中的Person
。因此,没有必要谈论歧义或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
,因此您无法编译此代码。您可以在public
中使用Emplo
方法。
回答你的上一个问题。你不能这样做。不能同时调用这两种方法。
答案 4 :(得分:0)
也许这可以回答您的问题:
...groupSizes growToAtLeast: 2.
...groupSizes at: 1 put: 4.
...groupSizes at: 2 put: 1.
..etc..
有关详细信息,请参见原始来源: In Java, how do I call a base class's method from the overriding method in a derived class?