public class Animal
{
private int legs;
private String kind;

public Animal()
{
setLegs(4);
}

public Animal(int l)
{
setLegs(l);
}

public void eat()
{
System.out.println("Eating");
}

public void move()
{
System.out.println("Moving");
}

public void setLegs(int l)
{
if (l != 0 && l != 2 && l != 4)
{
System.out.println("Wrong number of legs!");
return;
}

legs=l;
}

public int getLegs()
{
return legs;
} public void setKind(String str)
{
kind=str;
}

public String getKind()
{
return kind;
}
}//Animal.java
public class Fish extends Animal
{
public Fish()
{
setLegs(0);
setKind("Fish");
}
}//fish.java
public class Zoo
{
public static void main(String argv[])
{
Fish fish = new Fish();

System.out.println(fish.getKind()+" has "+ fish.getLegs()+" legs.");
}
}//Zoo.java
其中Fish类继承了Animal类,随便修改Fish类中的SetLegs(int i)方法的i的值,除了i=0,2,4外,其他值为什么返回的结果都是
"Fish has 4 legs."因为是初学者自学,希望能够认真详细的解答。

解决方案 »

  1.   

    public Animal()
    {
    setLegs(4);
    }默认设置为4
      

  2.   

    1楼说的清楚了
    当Fish fish = new Fish(); 
    会首先默认调用 父类构造函数
    也就是
    public Animal() 

    setLegs(4); 

      

  3.   

    public Fish() 

    super(xxx); 
    setKind("Fish"); 
    }
      

  4.   

    fish继承了animal类  而fish在调用构造函数时会先调用  animal的无参构造函数 而你在无参构造函数中将legs赋值为4
     fish中的getleg()和setlegs()是继承的父类的  所以他取得legs值为父类中legs的值 legs是私有的子类不能用它
      你将legs声明为public
      

  5.   

    如果在父类中没有写任何构造器或者写了无参构造器,此时的子类在其构造器中默认的调用父类的无参构造器。
    如果在父类中写了有参的构造器,此时在子类的构造器中必须显示的调用父类的有参构造器super(参数)。
      

  6.   

    补充一点  你在fish调用父类函数  所以运行是取父类变量  你在fish里面重写getleg和setleg就行了主要是leg是父类的变量
    他听父类的  你想通过fish改legs值 得在fish重重定义