java – 使用多态?

员工类

public class Employee {
protected String name;
protected String jobsheetnumber;

public Employee(String n,String j){
this.name = n;
this.jobsheetnumber = j;
}
public Employee(String name)
{
this.name = name;
}

public String getName() {
    return name;
}

public String getJobsheetnumber() {
    return jobsheetnumber;
}

public void setName(String name) {
    this.name = name;
}

public void setJobsheetnumber(String jobsheetnumber) {
    this.jobsheetnumber = jobsheetnumber;
}



}

机械课

public class Mechanic extends Employee{


public Mechanic(String name,String jobsheetnumber){
super(name,jobsheetnumber);
}
}

主管班

public class Supervisor extends Employee{


public Supervisor(String name){
super(name);
}
}

公司类[片段]

public class Company {
private String companyname;
private String companyaddress;
private String postalcode;
private String city;
private String country;
private String telephonenumber;
private String faxnumber;
private String province;
private Employee supervisor;
private Employee mechanic;




public Company(String companyname,String companyaddress,String postalcode,String city,String country,String telephonenumber,String faxnumber,String province,String supervisorname,String jobsheetnumber,String mechanicname)
{
 this.companyname = companyname;
 this.companyaddress=companyaddress;
 this.postalcode = postalcode;
 this.city=city;
 this.country=country;
 this.telephonenumber=telephonenumber;
this.faxnumber=faxnumber;
this.province=province;
supervisor = new Supervisor(supervisorname);
mechanic = new Mechanic(mechanicname,jobsheetnumber);




}

Employee Class是Mechanic和Supervisor类的超类.现在我使用Employee的属性,即子类Mechanic和Supervisor Class中的name和jobsheetnumber

代码工作正常..但如果我想在Mechanic和Supervisor中添加扩展功能怎么办?然后我无法访问这些变量,因为引用是Employee类型对象.

这是正确使用多态吗?我们每次创建Supervisor / Mechanic对象的引用时都必须使用super()作为构造函数?
我们不能在Supervisor和Mechanic Class中使用扩展功能吗?

解决方法:

如果要调用超类非零arg构造函数然后是,则必须显式调用它.如果超类构造函数没有参数,那么将为您插入调用.

多态性的要点是,对象可以自己处理,而不必让程序的其余部分对它们进行微观管理,因此外部程序通过引用具有接口或超类的类型来引用它们,而不必知道确切的具体类型.例如,所有员工可能都有一种工作方法,其中该工作采用与主管不同的形式,而不是机械师;工作方法将被特定的子类覆盖,并可能调用子类上的特定方法.因此,公司可以遍历所有员工并调用每个员工的工作,同时为员工的不同子类定义不同的工作.

(实际上,使用子类来描述角色的工作太不灵活,因为员工可能有多个角色,或者这些角色可能会随着时间的推移而发生变化.通常最好使用组合,这里将角色对象分配给员工.)

上一篇:c# – 为什么要实现IEquatable接口


下一篇:c# – Foreach – 根据List中项目的类型不同的说明