好的,我有一个接口和2个实现它的类。唯一的问题是两个类都有其中未在接口中列出的方法。我有一个测试类,它使用接口类型的ArrayList:
ArrayList<Company> employees = new ArrayList<Company>();
该计划旨在允许创建两个单独的员工类
public class Salaried implements Company
和
public class Hourly implements Company
并允许某些方法与它们一起使用。这两个类都实现了接口,但也有自己独有的其他方法。
在测试类中,我正在尝试使用arrayList来存储创建的不同员工,以便以后可以使用他们的方法。但是程序不会编译,因为我在创建员工时使用不在界面中的方法,并且它不会让我使用这些方法。
我该如何解决这个问题?在界面内或类本身内是错误的吗?
答案 0 :(得分:1)
如果我理解正确,你应该施展。尝试使用类型类型转换来调用特定于实现的方法。
ArrayList<Company> companies = new ArrayList<>();
for (Company c : companies) {
if (c instanceof Salaried) {
Salaried s = (Salaried) c;
//call salaried methods
} else if (c instanceof Hourly) {
Hourly h = (Hourly) c;
//call hourly methods
} else {
throw new AssertionError("Unknown subtype of Company found.");
}
}
答案 1 :(得分:0)
但是程序无法编译,因为我在创建员工时使用了界面中没有的方法,并且不允许我使用这些方法。
我不确定你的意思。如果实例化Salaried
类型的变量,则可以调用特定于Salaried
类的方法。 Hourly
也是如此。在那里,您可以添加到ArrayList
,因为Salaried
和Hourly
都实现了Company
。