2017-04-08 64 views
1

新构件,第一次海报。请原谅我的问题中的任何错误或失礼。构造表示“没有发现参数”时参数提供

超类:

public Person(String n,String pos, String db, String dW, TimePeriods tP,double bS,IManager m){ 
    setName(n); 
    position=Position.valueOf(pos); 
    dob=LocalDate.parse(db); 
    dateWorking=LocalDate.parse(dW); 
    timePeriod=tP; 
    baseSalary=bS; 
} 

子类:

private CEO(String n,String pos, String dob, String dW, TimePeriods tP,double bS, IManager m){ 
} 

我的错误,发生在子类CEO构造:

构造函数Person类人不能被应用到给定的类型; 要求:字符串,字符串,字符串,字符串,TimePeriods,双,iManager中
发现:没有参数的原因:实际的和正式的参数列表的长度不同

谁能帮我找出为什么不找到我的论点?

+1

我没有看到显式调用'超()'。 –

回答

1

因为你没有调用Person构造函数(使用super(..))内CEO类的构造函数,编译器将尝试添加默认super()CEO构造函数的第一线。

但是,调用默认super()编译失败,你没有零参数的构造函数用于Person

所以,在你CEO类中添加super(n, pos, dob, etc..)呼叫,如下图所示:

public CEO(String n,String pos, String dob, 
     String dW, TimePeriods tP,double bS, IManager m){ 
    super(n, pos, dob, dw, tP, bS, m);//calls superclass i.e., Person constructor 
} 

而且,你已经得到巨大的参数列表构造你的类,这是非常难读/维持 ,我强烈建议你需要考虑使用Builder模式(看here),使其降低了复杂性和代码可以很容易阅读和维护重构你的类。

+0

快速而美丽!非常感谢你的帮助。 我肯定会寻找到Builder模式,但我目前的项目结构已经由教科书决定,我不能随意去改变它。 再次感谢! –