如何从java中的继承类调用具有相同名称的函数

时间:2014-10-02 04:58:49

标签: java inheritance ambiguity

我是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);
    }
}

5 个答案:

答案 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()中的Emplodispaly()中的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?