如何从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类方法


你甚至不能调用一个超级类的版本,也就是说你不能在你的
Emplo
class
display()
method
super.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
}