如果在Parent类和Child Class中有两个同名的方法..?

时间:2015-04-03 16:38:35

标签: java inheritance methods

如果在Parent类和Child Class中有两个具有相同名称的方法,例如:

家长班:

public abstract class Employee implements Payments {
    private String name;
    protected double basicSalary;

    public Employee(String name, double basicSalary) {
        this.basicSalary = basicSalary;
        this.name = name;
    }

    public void display() {
        System.out.println( " Name: " + name + " - Basic Salary: " + basicSalary +"SR" );
    }
}

儿童班:

public class Faculty extends Employee {
    private String degree;
    private int teachingHours;

    public Faculty(String name, double salary, String degree, int teachingHours) {
        super(name, salary);
        this.degree = degree;
        this.teachingHours = teachingHours;
    }   

    public void display() {
        System.out.println( " Name: " +getName() + " - Degree:" +degree);
    }

我创建了一个这样的对象:

Employee[] arrEm = new Employee[4];
arrEm[0] = new Faculty("ahmad", 1000, "Phd", 10);

所以,如果我写

arrEm[0].display();

这样,方法display()将用于子项。但是如果我们想在父类中使用方法显示,那怎么办呢?

提前致谢!

4 个答案:

答案 0 :(得分:2)

这是因为首先你这样做: Employee [] arrEm = new Employee [4]; 这将为对象生成arrEm数组。然后你这样做: arrEm[0]= new Faculty("ahmad" , 1000 , "Phd" , 10 ); 您使用arrEm [0]来引用子类对象,以便它将使用子项的显示。这是多态性的正常情况。你可以在谷歌上搜索它。它很有用。如果要使用父显示,请使用

arrEm[0] = new Employee;

或者有一种方法可以像

一样向上转播
child a= new child();

父母p =(父母)a;

这个a.display()将使用父类中的显示。

答案 1 :(得分:0)

您必须将其称为以下内容:

super.display();

答案 2 :(得分:0)

然后要么不在子类中声明显示方法,要么创建父类的实例而不是像rrEm[0]= new Employee("ahmad" , 1000 )这样的子类(虽然我认为你不想这样)或者从子类调用父方法,如{ {1}}

答案 3 :(得分:0)

如果要调用父类的显示方法,则应将super.dislay()添加到Faculty类的display()方法中。

public class Faculty extends Employee {
private String degree;
private int teachingHours;

public Faculty( String name , double salary , String degree , int teachingHours) 
{
    super(name , salary );
    this.degree=degree;
    this.teachingHours = teachingHours;
}   
public void display()
{
    //calling display() method of parent class
    Super.display();
    System.out.println( " Name: " +getName() + " - Degree:" +degree);
}

或 如果您不想从子类调用它,则使用父类构造函数而不是子类创建对象。

  Employee [] arrEm = new Employee [4];
  //calling parent class constructor
  arrEm[0]= new Employee("ahmad");

在这里你不能利用教师班的成员(学位,教学时)。