在ArrayList

时间:2016-11-23 02:35:32

标签: java arraylist interface

好的,我有一个接口和2个实现它的类。唯一的问题是两个类都有其中未在接口中列出的方法。我有一个测试类,它使用接口类型的ArrayList:

ArrayList<Company> employees = new ArrayList<Company>();

该计划旨在允许创建两个单独的员工类

public class Salaried implements Company 

public class Hourly implements Company

并允许某些方法与它们一起使用。这两个类都实现了接口,但也有自己独有的其他方法。

在测试类中,我正在尝试使用arrayList来存储创建的不同员工,以便以后可以使用他们的方法。但是程序不会编译,因为我在创建员工时使用不在界面中的方法,并且它不会让我使用这些方法。

我该如何解决这个问题?在界面内或类本身内是错误的吗?

2 个答案:

答案 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,因为SalariedHourly都实现了Company