运行类的重写方法?

时间:2014-02-04 18:57:40

标签: java interface

这是我正在尝试做的一个例子,这很难解释所以这是使用宠物的简化版本:

public interface Pet {

    public String talk();
}

public class Dog implements Pet{

       public String talk()
       {
           return "Woof!";
       }
}

import java.util.ArrayList;


public class Person {

    ArrayList<Pet> pets = new ArrayList<Pet>();

       public Person()
       {
         pets.add(new Dog()); 
       }

       public void makePetsSpeak()
       {
          for(int i=0; i < pets.size(); i++)
          {
            System.out.println(pets.get(i).talk());
          }
       }
}

public class Main
{
    public static void main(String [] args)
    {
        Person p = new Person();
        p.makePetsSpeak();
    }
}

运行Person.MakePetsSpeak()时,它什么都不返回。我正在做什么或者有其他办法吗?

3 个答案:

答案 0 :(得分:1)

界面总是抽象的。所以

public abstract interface Pet

将是

public interface Pet

摘要用于某些代码(旧代码)只是为了兼容性,但你不再需要它了。

列表没有Count方法。使用size

要从列表中获取项目,您应该使用get方法。

你应该改变你的

System.out.println(pets(i).Talk());

System.out.println(pets.get(i).Talk());

而且,无论如何你的代码都记住了我的C#代码。遵循有关命名约定的java规则。

答案 1 :(得分:1)

此代码的修改版本运行正常。确实MakePetsSpeak会返回
没有,因为它被宣布无效。但是“Woof!”打印出来。所以答案是 你在这里没有真正的问题(一旦修复了编译错误)。

import java.util.ArrayList;
import java.util.List;

abstract interface Pet {
    public String Talk();
}

class Dog implements Pet {

    public String Talk() {
        return "Woof!";
    }
}

public class Person {
    List<Pet> pets = new ArrayList<Pet>();

    public Person() {
        pets.add(new Dog());
    }

    public void MakePetsSpeak() {
        for (int i = 0; i < pets.size(); i++) {
            System.out.println(pets.get(i).Talk());
        }
    }

    public static void main(String[] args) {
        Person p = new Person();
        p.MakePetsSpeak();
    }
}

答案 2 :(得分:0)

更正了您的编译问题,看起来它的工作正常,具有预期的行为。 另外,遵循Java命名约定 - 函数以小写字母开头。

Pet.java

public interface Pet {

    public String talk();
}

Dog.java

public class Dog implements Pet{

       public String talk()
       {
           return "Woof!";
       }
}

Person.java

import java.util.ArrayList;


public class Person {

    ArrayList<Pet> pets = new ArrayList<Pet>();

       public Person()
       {
         pets.add(new Dog()); 
       }

       public void makePetsSpeak()
       {
          for(int i=0; i < pets.size(); i++)
          {
            System.out.println(pets.get(i).talk());
          }
       }
}

Main.java

public class Main
{
    public static void main(String [] args)
    {
        Person p = new Person();
        p.makePetsSpeak();
    }
}

输出:

Woof!