如何获得所需的继承结果?

时间:2017-04-19 11:35:59

标签: java inheritance

public class MonsterMash
{
  public static void main(String[] args)
  {
    Monster moron = new Senator("jim","Georgia");
    System.out.println(moron.getName());
    System.out.println(moron.getState());
  }
}

这是超类

public class Monster
{
   String name;
   public Monster()
   {
     name="Dracula";
   }
  public Monster(String n)
  {
    name=n;
  }
  public String getName()
  {
    return name;
  }
}



public class Politician extends Monster
{
  public Politician(String n)
 {
    super(n);
 }
}

public class Senator extends Politician
{
  String state;

  public Senator(String n)
  {
    super(n);
    state="New Jersey";
  }
  public Senator(String n,String s)
  {
   super(n);
   state=s;
  }
  public String getState()
  {
    return state;
  }
}

执行程序后,代码不会产生所需的结果。 我认为我在主要班级做错了什么。

我想要的结果是Jim Georgia。 我该怎么做才能打印出来?

4 个答案:

答案 0 :(得分:2)

您必须将Senator分配给Senator类型引用,因为您只想调用属于Senator的方法。

    Senator moron = new Senator("jim","Georgia");
    System.out.println(moron.getName());// Monster/Polititian/Senator
    System.out.println(moron.getState());// Senator only

答案 1 :(得分:0)

您没有在参议员构造函数中使用s的值

    public Senator(String n,String s)
  {
    super(n);
    state= s;  // This was set to a default value of "New Jersey" before
  }

你需要白痴成为参议员而不是怪物。在Main:

 Senator moron = new Senator("jim","Georgia");

答案 2 :(得分:0)

Senator的构造函数将状态值设置为“New Jersey”,您所需的状态值永远不会设置为您从main()传递的动态值。

答案 3 :(得分:0)

在课堂上MonsterMash:

Senator moron = new Senator("jim","Georgia");

如果您不想在此更改并保持动态绑定,则必须将Monster和Politician类都设置为抽象类,并在两个类中创建抽象方法getState():

public abstract class Monster {
    String name;
    public Monster()
    {
       name="Dracula";
    }
   public Monster(String n)
   {
       name=n;
   }
   public String getName()
   {
       return name;
   }

   abstract String getState();
}

public  abstract class Politician extends Monster{
 public Politician(String n)
 {
    super(n);
 }

 abstract String getState();
}