[英]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.