我正在尝试使用继承,以便可以正确执行测试类中包含的代码。我不确定如何实现带有goPee()方法的名为Bathroom的抽象类或接口。你知道怎么编码吗?

如果我添加一个抽象类或一个接口,然后分别通过扩展或实现将它们添加到Human类中,我总是被要求在Human类中为goPee()方法编写实现,我不想这样做,因为我的goPee()方法实现是在Male和Female子类中编写的。

import java.util.ArrayList;

class Human
{
  private String name;
  public Human (String name)
  {
    this.name = name;
  }
  public String getName()
  {
    return name;
  }
  public void eat()
  {
    System.out.println(name + " went to fridge.");
  }
}

class Male extends Human
{
  public Male(String name)
  {
    super(name);
  }
  public void goPee()
  {
    System.out.println(getName() + " stood up.");
  }
}

class Female extends Human
{
  public Female(String name)
  {
    super(name);
  }
  public void goPee()
  {
    System.out.println(getName() + " sat down.");
  }
}

public class TestHuman
{
  public static void main(String[] args)
  {
    ArrayList<Human> arr = new ArrayList<Human>();
    arr.add(new Male("john"));
    arr.add(new Female("sally"));
    for (int count = 0; count < arr.size(); count++)
    {
      arr.get(count).eat();
      arr.get(count).goPee();
    }
  }
}

最佳答案

您必须在Human类中定义goPee()方法。由于在两个子类中都将其覆盖,因此它可以是抽象方法。这也意味着人类必须是抽象的。

abstract class Human
{
  private String name;
  public Human (String name)
  {
    this.name = name;
  }
  public String getName()
  {
    return name;
      }
  public void eat()
  {
    System.out.println(name + " went to fridge.");
  }
  public abstract void goPee();
}

在Human中声明抽象方法可确保Human的所有子类使用相同的参数和返回类型来实现goPee()方法。这使您可以在人类上调用goPee()而不知道它是男性还是女性,因为您知道两者都实现了它。

08-04 02:37