一.问题简介
在Java当中,我们有时会遇到将不同class放到一个arraylist当中进行调用的情况,笔者在网上搜了一圈发现就没有一篇博文讲解如何实现这个功能的,因此写了这篇文章。最开始我遇到这个问题是因为之前笔者在编写吃豆人游戏的时候,发现打印吃豆人游戏的地图,如果能够使用一个arraylist来储存不同的类别class的对象,那么就会显得更加方便了。笔者尝试了使用自定义的Person和Animal类放到一个已经申明为Object类型的ArrayList当中,但是笔者发现,如果这样使用的话,我们无法通过遍历ArrayList来获得Person类和Animal类别的属性和方法,相当于整个ArrayList就白写了,因为即使能够将这些类实例化后的对象储存进去,但也无法对其进行实际上的使用。而用这个具备Object类型的ArrayList储存非自定义的类别的对象,比如String、Interger的话则没有问题。
所以这里我尝试了一种全新的,直接通过改写Object类的方法来实现这个功能:
二.代码实现
我们先自定义Person类和Animal类,让它们都继承Object类,因为之后我需要改写Object类的方法,让其具有say()方法。开始实验,这个类实例化后的对象用于之后保存在ArrayList当中:
Person.java:
public class Person extends Object{
//测试这是否可以作为object类继续保存
public int x;
public int y;
public Person(int x,int y)
{
this.x=x;
this.y=y;
}
public void say()
{
System.out.println("the x is "+x);
System.out.println("ths y is "+y);
}
}
然后是Animal.java
public class Animal extends Object{
public int x;
public int y;
public Animal(int x,int y)
{
this.x=x;
this.y=y;
}
public void say()
{
System.out.println("the x is "+x);
System.out.println("ths y is "+y);
}
}
改写Object类,将其添加say()方法,不然将Person和Animal添加进入ArrayList当中无法调用say()方法,你在Person和Animal当中写了什么方法,就需要正在object当中进行补充,因为这两个类都继承自Object:
public class Object {
public void say()
{
}
}
自己手动编写一个ArrayList:
public class Arraylist{
private Object[] elements=new Object[1000];
private int size;
public void add(Object item) {
elements[size++]=item;
}
public Object get(int index) {
return elements[index];
}
public int size()
{
return this.size;
}
}
在另外的文件test.java内调用他们,进行测试:
public class test {
public static void main(String[] args) {
Arraylist a=new Arraylist();
a.add(new Person(1,2));
a.get(0).say();
a.add(new Animal(2,1));
a.get(1).say();
System.out.println();
System.out.println("大小为"+a.size());
}
}
输出:
the x is 1
ths y is 2
the x is 2
ths y is 1
大小为2
自定义ArrayList成功。