簡體   English   中英

如何將這種多重繼承轉換為Java接口?

[英]how to convert this multiple inheritance to interfaces in Java?

我想實現以下多重繼承的情況:

(摘自http://www.learncpp.com/cpp-tutorial/117-multiple-inheritance/

Person           Employee
   |_________________|
              |
           Nurse

最后,我想打印雇員和護士的薪水。 在C ++中,使用多重繼承很容易完成,但是Java存在問題。

我有以下代碼:

public class Person{
    protected String name;
    protected int age;
    public Person(String name,int age){
        this.name=name;
        this.age=age;
    }
}

和界面:

public interface Employee{
    public double getSalary();
}

和班上的護士:

public class Nurse extends Person implements Employee{
    private double salary;
    public Nurse(String name, int age, double salary){
        super(name,age);
        this.salary=salary;
    }
    @Override
    public double getSalary(){
        return salary;
    }
}

但是我不知道如何使雇員打印工資,因為它是一個界面。 我不想使用其他稱為Employee的抽象類。 如何解決這個問題?

謝謝

假設所有員工都是人(除非您正在雇用猴子!),您是否不能將課程連鎖?

public class Person {
    private String name;
    private int age;

    public Person(String name,int age){
        this.name = name;
        this.age = age;
    }
}

public class Employee extends Person {
    private double salary;

    public double getSalary(){
        return salary;
    }
}

public class Nurse extends Employee {
}

Java只允許接口的多重繼承,因此,要實現該接口,必須為每個要定義的接口定義一個接口,方法是將部分接口派生的所有方法委派給它們的實現,以將它們組合並組成一個類。

人機界面 -如您所定義

PersonImpl類

public final class PersonImpl implements Person {
    private final String name;
    private final int age;

    public PersonImpl(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String getName() {
        return name;
    }

    @Override
    public int getAge() {
        return age;
    }
}

EmployeeImpl類

public final class EmployeeImpl implements Employee {
    private final double salary;

    public EmployeeImpl(double salary) {
        this.salary = salary;
    }

    @Override
    public double getSalary() {
        return salary;
    }
}

護士班 -由其他班級組成,並向他們委托功能:

public class Nurse implements Employee, Person {

    private final Employee employee;
    private final Person person;

    public Nurse(String name, int age, double salary) {
        person = new PersonImpl(name, age);
        employee = new EmployeeImpl(salary);
    }

    @Override
    public double getSalary() {
        return employee.getSalary();
    }

    @Override
    public String getName() {
        return person.getName();
    }

    @Override
    public int getAge() {
        return person.getAge();
    }
}

建議為您編寫的每個類定義一個接口,以便將來能夠使用該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM