class Animal
{
private String name ;
private int legs ;

public Animal()
{
name = "哈哈";
legs = 4 ;
Animal an = new Animal ("嘻嘻" , 2);
}
public void setName( String name )
{
this.name = name ;
}
public String getName()
{
return name;
}
public Animal( String name , int legs )
{
this.name = name ;
this.legs = legs ;
}

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

public void move ( int n )
{
for ( int i = 1 ; i <= n ; i++ )
{
System.out.println( name + " Moving ! ! !" );
}
}
}/* 
写一个类Fish,继承自Animal类,
并提供一个构造方法,
该构造方法需要一个参数name,并给legs赋默认值0;
该类还要求覆盖Animal类中的无参move()方法
要求输出:XXX Swimming!!
*/
class Fish extends Animal
{
private String name ;
private int legs ;

Fish ( String name )
{
this.name = name ;
this.legs = legs ;
legs = 0 ;
}

public void move ()
{
System.out.println( this.name + "  Swimming!!");
}
}
/*
写一个类Bird,继承自Animal类,
并提供一个构造方法,
该构造方法需要一个参数name,并给legs赋默认值2;
该类还要求覆盖Animal类中的无参move()方法,
要求输出:XXX Flying!!
*/class Bird extends Animal
{
private String name ;
private int legs ;

public Bird( String name )
{
this.name = name ;
this.legs = 2 ;
}

public void move ()
{
System.out.println( name + " Flying!!");
}
}
/*
写一个类Zoo,
要求分别生成若干个Animal,Fish和Bird。
并调用他们的属性和方法。
*/class Zoo
{
public static void main ( String [] args )
{
Animal an = new Animal("adas" , 2);
an.move(5);
Animal a1 = new Fish ("鱼");
a1.move();
a1.getName("大时代");
Animal a2 = new Bird ("鸟");
a2.move();

}
}
怎样调用父类子类的属性呢? 比如我想从zoo这个类调用父类和子类的属性 用set和get吗? 这个super是怎么用的啊??????

解决方案 »

  1.   

    super.属性名  一般都不这么用,  属性都private了。  得用get set方法
      

  2.   

    就是说 如果属性是public 的 那么可以用 super.name;这样来调用是这样的嘛?
    比如我在父类name 子类也有name
    那么我现在在另外一个类里写方法 然后 父类引用 指向 子类 
    或则说 我要怎么才能调用到父类的属性 就是父类和子类的属性都一样 他要怎么区别你调用的是父类还是子类的属性呢
      

  3.   

    LZ的代码中
    Fish ( String name )
    {
    this.name = name ;
    this.legs = legs ; //这个是干什么用的呢?没什么实际意义吧
    legs = 0 ;
    }
      

  4.   

    怎样调用父类子类的属性呢? 比如我想从zoo这个类调用父类和子类的属性 用set和get吗? 这个super是怎么用的啊??????
    不知道LZ想问啥呢?
    难道是要调用子对象属性?
    如果是的话只能用get和set了,因为他们都是private
      

  5.   

    class Fish extends Animal
    {
    private String name ;
    private int legs ;Fish ( String name )
    {
    this.name = name ;
    this.legs = legs ;
    legs = 0 ;
    }
    我是这样想的 他fish有个私有属性 构造方法里面的this是指那个fish的那个私有属性 不知道对不对这样理解
      

  6.   


    如果父类子类属性同名的话,你创建对象时候引用是什么类型,就调用的谁的。
    如:
    Animal an = new Fish("adas");
    an.name 就是父类的了,子类的被擦除了。想用子类的话得强转((Fish)an).name;
      

  7.   

    0.0 是我搞错了 我没有在构造方法里给他这个legs参数  那么这个legs 可以直接写成legs = 0 ;
      

  8.   

    你那个
    Fish ( String name )
    {
    this.name = name ;
    this.legs = legs ;
    legs = 0 ;
    }
    没传参数进来的时候 this.legs = legs ;这两边的legs其实都是this.legs;
      

  9.   

    Animal a1 = new Fish ("鱼");
    a1.move();
    ((Fish)a1).name = "232323";;
    System.out.println(a1.name);
    为什么我转成fish他报错说我调用的是父类的name 呢 
      

  10.   

    这个要改成 System.out.println(((Fish)a1).name);