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。 我该怎么做才能打印出来?
答案 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();
}