可以说我有
class Person {
String Age;
String Name;
}
Class Employee {
int Salary;
String Name;
}
我在列表中有这些类的各种实例。我创建了 2 个单独的函数来接受List<Person>
和List<Employee>
显示内容。但我想创建一个接受任何对象列表并执行显示部分的通用函数。
请帮我
谢谢阳光
可以说我有
class Person {
String Age;
String Name;
}
Class Employee {
int Salary;
String Name;
}
我在列表中有这些类的各种实例。我创建了 2 个单独的函数来接受List<Person>
和List<Employee>
显示内容。但我想创建一个接受任何对象列表并执行显示部分的通用函数。
请帮我
谢谢阳光
最简单的解决方案是让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!"); }
}
然后,您可以使用Human
s 的列表来存储这两种对象类型。迭代变得非常容易:
List<Human> humanList = new ArrayList<>();
// ... Populate the list with Persons and Employees
for(Human human : humanList) {
human.showMe();
}
我还没有测试过,但是像这样:
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();
}
}
}
我应该让 Employee 扩展 Person,这样你就可以有一个通用的函数来显示。
另一种方法是为 Person 和 Employee 提供一个通用接口,具有相同的显示功能,但有两种不同的实现。