- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
员工类
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);
}
}
主管类(class)
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 类是 Mechanic 和 Supervisor 类的父类(super class)。现在我正在使用 Employee 的属性,即子类 Mechanic 和 Supervisor 类中的 name 和 jobsheetnumber
代码工作正常..但是如果我想在 Mechanic 和 Supervisor 中添加扩展功能怎么办?然后我无法访问这些变量,因为引用是对 Employee 类型对象的引用。
这是对多态性的正确使用吗?每次我们创建 Supervisor/Mechanic 对象的引用时,我们必须使用 super() 作为构造函数?我们不能在 Supervisor 和 Mechanic 类中使用扩展功能吗?
最佳答案
如果你想调用父类(super class)的非零参数构造函数那么是的,你必须明确地调用它。如果父类(super class)构造函数没有参数,那么将为您插入调用。
多态性的要点是对象可以照顾好自己,而不必让程序的其余部分对它们进行微观管理,因此外部程序通过具有接口(interface)或父类(super class)类型的引用来引用它们,而无需知道确切的具体类型。例如,所有员工都可能有一种工作方法,其中主管的工作形式与机械师的工作形式不同; work 方法将被特定的子类覆盖,并可能调用子类的特定方法。因此,公司可以遍历所有员工并调用每个员工的工作,而工作对于不同的员工子类有不同的定义。
(在实践中,使用子类来描述角色太不灵活了,因为一个员工可能有多个角色,或者这些角色会随着时间而改变。通常最好使用组合,在这里将 Role 对象分配给一个 Employee。)
关于java - 多态性的使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34646974/
我来自 Asp.Net 世界,试图理解 Angular State 的含义。 什么是 Angular 状态?它类似于Asp.Net中的ascx组件吗?是子页面吗?它类似于工作流程状态吗? 我听到很多人
我一直在寻找 3 态拨动开关,但运气不佳。 基本上我需要一个具有以下状态的开关: |开 |不适用 |关 | slider 默认从中间开始,一旦用户向左或向右滑动,就无法回到N/A(未回答)状态。 有人
我是一名优秀的程序员,十分优秀!