这是我正在尝试做的一个例子,这很难解释所以这是使用宠物的简化版本:
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()时,它什么都不返回。我正在做什么或者有其他办法吗?
答案 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!