2013-04-03 67 views
2

可以说我有列表具有不同的对象

class Person { 
    String Age; 
    String Name; 
} 

Class Employee { 
    int Salary; 
    String Name; 
} 

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

请帮我

感谢 阳光

+2

扩展人与使用人的一个列表? – Davz

回答

10

最简单的解决方法是让Employee继承Person。这很自然,因为员工最有可能是个人。他们甚至分享了一些属性,如Name(你已经在你的代码中)和Age

class Person { 
    String Age; 
    String Name; 
} 

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

然后,就足够了的人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!"); } 
} 

然后可以使用的Human个列表来存储对象类型。迭代变得非常容易:

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

for(Human human : humanList) { 
    human.showMe(); 
} 
0

我应该'已经让员工扩展人,所以你可以有一个通用的功能来显示。

另一种方式可以是具有相同显示功能但具有两种不同实现的Person和Employee的通用接口。

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(); 
} 
} 
} 
相关问题