员工类
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构造函数然后是,则必须显式调用它.如果超类构造函数没有参数,那么将为您插入调用.
多态性的要点是,对象可以自己处理,而不必让程序的其余部分对它们进行微观管理,因此外部程序通过引用具有接口或超类的类型来引用它们,而不必知道确切的具体类型.例如,所有员工可能都有一种工作方法,其中该工作采用与主管不同的形式,而不是机械师;工作方法将被特定的子类覆盖,并可能调用子类上的特定方法.因此,公司可以遍历所有员工并调用每个员工的工作,同时为员工的不同子类定义不同的工作.
(实际上,使用子类来描述角色的工作太不灵活,因为员工可能有多个角色,或者这些角色可能会随着时间的推移而发生变化.通常最好使用组合,这里将角色对象分配给员工.)