【Java】:自定义能储存和装载不同(class)数据类型的ArrayList

一.问题简介

在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成功。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值