【问题标题】:if there are two methods with same name in Parent class and Child Class ..?如果父类和子类中有两个同名的方法..?
【发布时间】:2015-06-08 18:41:05
【问题描述】:

如果Parent class和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() 方法将在 child 中使用。但是万一我们要使用Parent Class中的方法显示,怎么办呢?

提前致谢!

【问题讨论】:

标签: java inheritance methods


【解决方案1】:

这是因为首先你要做: 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() 将使用父类中的显示。

【讨论】:

    【解决方案2】:

    如果要调用父类的display方法,需要在Faculty类的display()方法中加入super.dislay()。

    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");
    

    在这里你不能使用Faculty class(degree, TeachingHours)的成员。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你必须这样称呼它:

        super.display();
        

        【讨论】:

        • 对不起我还不明白..我试着写“arrEm[0].super.dislay();”他给我一个错误,如果我写“super.display();”我不选择对象,那么 java 将如何知道我的意思是这个 arrEm[0] 或 arrEm[1] ?我试着在主课上写“super.dislay();”他给我错误
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 1970-01-01
        • 2012-03-13
        • 2021-10-02
        • 1970-01-01
        相关资源
        最近更新 更多