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