class Animal{
public String name;
Animal(String name){
this.name=name;
}
public void enjoy(){
System.out.println("叫声");
}
public void print(){
System.out.println(name);
}
}
class Cat extends Animal{
private String eyec;
Cat(String name,String c){
super(name);
eyec=c;
}
public void enjoy(){
System.out.println("Cat叫");
}
}
class Dog extends Animal{
private String furc;
Dog(String name,String c){
super(name);
furc=c;
}
public void enjoy(){
System.out.println("Dog叫");
}
}
class Lady{
public String name;
private Animal pet;
Lady(String name,Animal pet){
this.name=name;
this.pet=pet;
}
public void petenjoy(){
pet.enjoy();
}
public void print(){
System.out.println(name);
}
} public class T2{
public static void main(String[] args){
Animal a = new Animal("animalname");
Cat c = new Cat("catname","blue");
Dog d = new Dog("Dogname","black");
Lady l1= new Lady("l1",c);
Lady l2= new Lady("l2",d);
// l1.petenjoy();
// l2.petenjoy();
a.print();
c.print();
d.print();
l1.print();
l2.print();
}
}子类 Cat、Dog继承来的name变量是怎么传递的,我是个初学者,自己始终也弄没清楚,请各位高手帮帮我,指点一下。

解决方案 »

  1.   

    就是cat还有dog这两个子类里的name变量是有值的,但没有给这个变量赋值的语句啊。
      

  2.   

    不是什么传递,是有这么一个属性,当你创建一个子类的对象的时候,就会先创建一个父类的对象,Cat的nama的属性,实际就是父类Animal的name属性.因为每一个Cat类对象,将会有一个Animal对象(父类).这里是将继承理解成为:拥有.
      

  3.   

    super(name);因为这个语句这个语句的意思就是调用父类的构造函数就是调用了Animal的构造函数。。在创建对象的时候构造函数就给name赋值了啊!!!
      

  4.   


    首先是有属性了,看里边的super(name);这里就是告诉JVM,调用哪一个父类构造函数.
    实际就是调用Animal的构造函数,这时候就赋值了
      

  5.   

    name变量都是先走父类Animal的构造函数赋值,然后走子类的构造函数。
    想自己彻底弄明白,整个断点,单步运行一下
      

  6.   

    super 只是调用父类的构造函数,至于你说的传值,是在你建立子类对象时,根据实参来赋值的。
      

  7.   

    super(name);
    走父类的时候穿进去的
      

  8.   

    非常感谢大家的指教
    这是马士兵的教程是不是在建立子类对象的时候子类里有着父类的对象,当用SUPER调用父类的构造方法时,实际上是给子类对象里的那个父类对象的name变量赋值,子类的这个name实际上就是子类里父类的那个,是同一个。我是不是可以这样理解。谢谢大家
      

  9.   

    当然不可以这么理解。
    首先,子类对象和父类对象,既然说到对象。那么他们俩肯定不是一个东西,在内存中他们俩分别指的不同的区域。
    其次,你应该这么理解。子类和父类都有一个名叫name的成员变量。其中子类的name是从父类那里继承来的。
    ……
      

  10.   


    那name的值也是继承来的吗?
      

  11.   

    在java中都是值传递,把父类做为一个值传递到子类中,就能用到父类中的name啦
      

  12.   

     super(name);
    实际上就是调用了 父类的构造方法
    Animal(String name){
        this.name=name;
    }
    要知道这里Animal类里有一个参数的构造方法,才可以这样调。