如何从java中继承的类调用同名函数 我是java新手,我记得C++中我们做了一些类似于 CordNo::fn-()/以避免继承中的模糊。
这是我的代码,我希望在这两个类中有相同的显示方法,并显式地访问它们如何从java中继承的类调用同名函数 我是java新手,我记得C++中我们做了一些类似于 CordNo::fn-()/以避免继承中的模糊。,java,inheritance,ambiguity,Java,Inheritance,Ambiguity,这是我的代码,我希望在这两个类中有相同的显示方法,并显式地访问它们 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 n
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);
}
}
在第二个显示方法中,使用super-keywod调用super-class显示方法,如下所示: super.display();(应该是方法的第一个语句) 而且不会有歧义,因为将调用display方法来创建其对象,这意味着在这种情况下将调用Employee的display()方法 因此,如果要调用Person类的display方法,则应创建该类的对象,并按该类类型进行引用,如: 人员p=新人员(您的数据); p、 display()//这里将调用person的display方法
不,在java中,不能从同一引用调用两个方法,不能调用实例类的特定方法实现 也就是说,您不能“绕过”子类方法并调用该方法的超类版本;只能使用
super.someMethod()
从子类内部调用super类方法
你甚至不能调用一个超级类的版本,也就是说你不能在你的
Emploclassdisplay()methodsuper.super.someMethod()中执行类似于super.someMethod()的操作,比如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);
}
`首先,在这里,您使用两种不同的方法<代码>显示()
在Emplo
和dispaly()
在Person
中。因此,没有必要说得模棱两可,也没有必要重写,让它正确无误
假设你被纠正了。那你就不能这样编码了
public void display(){ // method in Person
System.out.println("name: "+name+"\nage: "+age);
}
然后
您正在使用较弱的修饰符来覆盖
,因此无法编译此代码。您可以在Emplo
中公开方法
最后一个问题的答案。你不能这么做。不能同时调用这两种方法。也许这可以回答您的问题:
public void myMethod()
{ //inherited method
super.myMethod(); //calls base class method
//... add more code to inherited method
}
有关详细信息,请参阅原始来源:
你的答案真的是基于打字错误吗?-.-'@Ajk\p在回答你需要纠正的其他问题之前。您应该了解,如果我将display方法设置为静态,那么在每个class@EmeraldRoar:如果将其设置为静态,则会使该方法无效,因为无法获取对象的状态(name
或age
)。哦,我无法对非静态变量进行静态引用:(如果一个方法是static
,那么它不是“继承的”,您可以使用ClassName.someStaticMethod()调用特定的实现)
没有实例。像display这样的方法值得继承还是可以保持静态?在代码中,它们不是静态的-它们没有static
关键字,所以它们是实例方法。它们必须是实例方法,因为它们需要访问实例字段。像方法一样,静态字段也有static
关键字,但将字段或方法设置为静态将是一个设计缺陷,因为Person的每个实例都有自己的名称等
public void myMethod()
{ //inherited method
super.myMethod(); //calls base class method
//... add more code to inherited method
}