如何在两个不同的类中使用相同的add()方法

use*_*114 3 java arrays oop methods

您有没有办法在两个不同的类之间使用相同的add()方法(向数组添加内容)?例如,我的湖类有以下add()方法:

 public void add (Fish aCatchableThing) 
    {
        if (numThings < catchableThings.length)
        {
            catchableThings[numThings++] = aCatchableThing;
        }
    }
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用以下代码:

public class FishingTestProgram3 
{
    public static void main(String [] args) 
    {

        Lake   weirdLake = new Lake(21);
        weirdLake.add(new AuroraTrout(76, 6.1f));
        weirdLake.add(new Tire());
        weirdLake.add(new Perch(32, 0.4f));
        weirdLake.add(new Bass(20, 0.9f));
        weirdLake.add(new Treasure());
        weirdLake.add(new Perch(30, 0.4f));
        weirdLake.add(new AtlanticWhiteFish(140, 7.4f));
        weirdLake.add(new RustyChain());
        weirdLake.add(new Bass(15, 0.3f));
        weirdLake.add(new Tire());
Run Code Online (Sandbox Code Playgroud)

这将是有效的(使用继承,即EndangeredFish extends fish, and Perch extends EndangeredFish )对于所有添加的鱼,但它不起作用的对象(即Tire,RustyChain,Treasure).Tire,RustyChain和Treasure是扩展SunkenObject类的类,它实际上是空的:

public abstract class SunkenObject
{


}
Run Code Online (Sandbox Code Playgroud)

我尝试在湖类中创建第二个添加方法但是没有成功.我想知道是否有人对这如何运作有任何想法?在那里我可以将所有东西(即鱼和沉没对象)添加到同一个数组中,以便何时

public void listAllThings() 
    {
        System.out.println("  " + this + " as follows:");
        for (int i=0; i<numThings; i++)
        {
            System.out.println("    " + catchableThings[i]);
        System.out.println();
        }
Run Code Online (Sandbox Code Playgroud)

实现数组中的所有内容都打印出来.谢谢您的帮助

如果有人想知道这是我试过的add()方法

public void add (SunkenObject sunkenObject) 
    {
        if (numThings < catchableThings.length)
        {
            catchableThings[numThings++] = sunkenObject;
        }
    }
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

答案几乎就在问题中.您希望能够添加到湖中的不仅仅是实例Fish.你想要添加的是一个可捕获的东西.所以你需要定义这样的类型.

FishSunkenObject因此应延伸命名为共同的基类CatchableThing,或应该实现所谓的接口CatchableThing.

并且add()方法的签名应该是

public void add(CatchableThing aCatchableThing) 
Run Code Online (Sandbox Code Playgroud)