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

if there are two methods with same name in Parent class and Child Class ..?

如果父类和子类中有两个同名的方法,例如:

父类:

1
2
3
4
5
6
7
8
9
10
11
12
13
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" );
    }
}

子类:

1
2
3
4
5
6
7
8
9
10
11
12
13
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);
    }

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

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

所以如果我写

1
arrEm[0].display();

这样,方法display()将用于child。但是,如果我们想在父类中使用方法显示,如何才能做到呢?

事先谢谢!


这是因为首先你要做的是:埃多克斯1〔2〕这将为对象生成arrem数组。然后你这样做:埃多克斯1〔3〕使用arrem[0]引用子类对象,以便它使用子类的显示。这是多态性的正常情况。你可以在谷歌上搜索。它很有用。如果要使用父显示,请使用

1
arrEm[0] = new Employee;

或者有一种向上的方式

1
child a= new child();

父级P=(父级)A;

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


如果要调用父类的display方法,应该在faculty类的display()方法中添加super.dislay()。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
}

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

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

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


那么要么不要在子类中声明显示方法,要么创建父类的实例,而不是像errEm[0]= new Employee("ahmad" , 1000 )这样的子类(尽管我认为您不需要这样做),要么从像super.display()这样的子类调用父方法。


你必须这样称呼它:

1
super.display();