2

可以说我有

class Person {
    String Age;
    String Name;
}

Class Employee  {
    int Salary;
    String Name;
}

我在列表中有这些类的各种实例。我创建了 2 个单独的函数来接受List<Person>List<Employee>显示内容。但我想创建一个接受任何对象列表并执行显示部分的通用函数。

请帮我

谢谢阳光

4

3 回答 3

10

最简单的解决方案是让Employee继承自Person. 这是很自然的,因为 Employee 很可能Person。它们甚至共享一些属性,例如Name(您已经在代码中拥有的)和Age.

class Person {
    String Age;
    String Name;
}

class Employee  extends Person {
    int Salary;
    // String Name; not needed anymore, inherited from Person
}

然后,有一个 Persons 列表就足够了List<Person>,您可以在其中存储两种对象类型。

如果您出于任何原因仍需要将它们分开,您可以添加一个公共父类或接口。理想情况下,将必要的方法(如显示)添加到界面中并让类实现它们:

interface Human {
   void showMe();
}

class Person implements Human {
    String Age;
    String Name;

    public void showMe() { System.out.println("I am a Person!");  }
}

class Employee implements Human {
    int Salary;
    String Name;

    public void showMe() { System.out.println("I am an Employee!");  }
}

然后,您可以使用Humans 的列表来存储这两种对象类型。迭代变得非常容易:

List<Human> humanList = new ArrayList<>();
// ... Populate the list with Persons and Employees

for(Human human : humanList) {
    human.showMe();
}
于 2013-04-03T12:27:06.130 回答
0

我还没有测试过,但是像这样:

public interface MyInterface{
public void display();
}

class Person implments MyInterface{

String Age;
String Name;

@Override
public void display(){
   //Logic to print the data
}
}

Class Employee  implments MyInterface{
int Salary;
String Name;
@Override
public void display(){
   //Logic to print the data
}
}

public class MyTest{

public static void main(String[] args){

  List<MyInterface> myList = new ArrayList<MyInterface>();

    MyInterface p = new Person();
    MyInterface e = new Person();
    myList.add(p);
myList.add(e);
printMyList(myList);

}

private void printMyList(  List<MyInterface> myList){
   for(MyInterface my:myList){
     my.display();
}
}
}
于 2013-04-03T12:33:00.333 回答
0

我应该让 Employee 扩展 Person,这样你就可以有一个通用的函数来显示。

另一种方法是为 Person 和 Employee 提供一个通用接口,具有相同的显示功能,但有两种不同的实现。

于 2013-04-03T12:31:03.123 回答