试图理解这种多态性练习

时间:2015-06-24 22:00:28

标签: java

在本书中,他们试图使用多态来使用数组对象创建自己的arrayList类。

我理解代码正在做什么,但它不允许编译,因为它们不是狗或猫类。 我把它们分别放在单独的文件中。

错误:动物无法解析为

public class MyAnimalList {
    private Animal[] animals = new Animal[5];
    private int nextIndex = 0;

    public void add(Animal a ) {
        if (nextIndex < animals.length) {
            animals[nextIndex] = a;
            System.out.println("Animal added at " + nextIndex);
            nextIndex++;
        }
    }

}

//next snippet

public class AnimalTestDrive{
    public static void main (String[]args) {
        MyAnimalList list = new MyAnimalList():
        Dog a = new Dog();
        Cat c = new Cat();
        list.add(a);
        list.add(c);
    }
}

3 个答案:

答案 0 :(得分:0)

你是一个现代的IDE(例如eclipse)吗?或者你是从命令行做的吗?

**如果您不使用IDE,我强烈建议您在开始时这样做。它将帮助您更顺畅,更快速地前进。 **

如果您使用命令行工具编写程序,请仔细查看oracle documentation

特别是 -cp 参数

你必须提供一个文件夹,java可以在其中找到编译的类文件,这就是-cp用于的目的。对于您的情况,java似乎无法找到其他.class文件(Animal或Dog等)。

多态概念

狗,鱼和鸟都是动物。所以他们都继承了一些基本概念。例如,所有这些都移动了。然而,一条狗跑,一条鱼游,一只鸟飞。让我告诉你它是如何在OO中完成的:

abstract class Animal{
 move();
}


class Dog extends Animal{
   private run(){
     ...
     // implementation
     ...
   }

   public move(){
      run();
   }
}


class Bird extends Animal{
   private fly(){
     ...
     implementation
   }

   public move(){
      fly();
   }
}


class Fish extends Animal{
   private swim(){
     ...
     implementation
   }

   public move(){
      swim();
   }
}


I hope it makes sense =]

PS:上面的代码是伪代码,不是Java

答案 1 :(得分:0)

1)必须创建一个公共动物类

2)必须创造一只狗和一只猫子类,两者都必须延伸动物。从动物身上延伸将允许狗和猫接受“添加”方法。

答案 2 :(得分:0)

好的,多态性的整个概念就是对象可以归类为更通用的对象。

例如:狗是动物,猫是动物,动物是生物

因此,Polymorphism允许您为一个类(Animal)定义一组通用特征(即字段和方法),以便在该类(Cats,Dogs,ect)下分类的所有其他类可以扩展这些特征。 / p>

现在您的代码无效的原因是因为您没有定义Dog或Cat类,所以您需要先创建具有某些属性的类动物:

public class Animal{
    //some fields

    //constructor

    //methods
}

然后创建另外两个扩展它的类Dog和Cat(extend是一个关键词,意味着该对象属于该类别)

这样你就可以创建:

public class Dog extends Animal{
    //some fields

    //constructor

    //methods
}

public class Cat extends Animal{
    //some fields

    //constructor

    //methods
}