class Animal//动物类
{
String number;
Animal()
{
System.out.println("我是动物的无参构造方法");
}
Animal(String ss)
{

System.out.println("我是动物的有参构造方法"); }
void aa()
{
System.out.println("我是an");
}
public static void main(String [] args)
{

DbTiger aa=new DbTiger("食肉类");
Animal bb=aa;

     aa.aa();
 bb.aa();
System.out.println(bb.number);
}
};
class Tiger extends Animal//老虎类
{
  // String number="老虎";
Tiger()
{
System.out.println("我是老虎的无参构造方法");
}
Tiger(String ss)
{

this.number=ss;
System.out.println("我是老虎的有参构造方法");
}
};
class DbTiger extends Tiger//东北虎类
{
String number="东北虎";
DbTiger(String ss)
{
super(ss);
System.out.println("我是东北老虎的有参构造方法");
    }
void aa()
{
System.out.println("我是db");
}};
有谁知道去掉被注释的地方和不去掉被注释地方的差别。为什么调用的是annimal的无参构造却把食肉类传递给了annimal中的kind?

解决方案 »

  1.   

    找了半天没找到kind,不知道你这话啥意思?class Animal//动物类 

    String number; 
    Animal() 

    System.out.println("我是动物的无参构造方法"); 

    Animal(String ss) 
    {  System.out.println("我是动物的有参构造方法");  } 
    void aa() 

    System.out.println("我是an"); 

    public static void main(String [] args) 
    {  DbTiger aa=new DbTiger("食肉类"); 
    Animal bb=aa;      aa.aa(); 
    bb.aa(); 
    System.out.println(bb.number); 

    }; 
    class Tiger extends Animal//老虎类 

      // String number="老虎"; //加上这句后,你的Tiger类里面就有两个number;一个是从Animal继承的,一个是自身带的一个.
    Tiger() 

    System.out.println("我是老虎的无参构造方法"); 

    Tiger(String ss) 
    {  this.number=ss; 
    System.out.println("我是老虎的有参构造方法"); 

    }; 
    class DbTiger extends Tiger//东北虎类 

    String number="东北虎"; 
    DbTiger(String ss) 

    super(ss); 
    System.out.println("我是东北老虎的有参构造方法"); 
        } 
    void aa() 

    System.out.println("我是db"); 
    } }; 
      

  2.   

    new 子类的实例时,程序会先走父类的无参构造函数,再走子类的构造函数
      

  3.   

    差别在于类的方法是动态绑定,可以被覆盖(Override);而类的成员变量是静态绑定,不存在覆盖。父类和子类的成员变量拥有相同的名字,它们存在不同的域中,互不影响。参照下面帖子2楼的回答
    http://topic.csdn.net/u/20081024/12/0d757fcf-3bc1-484b-86f2-f3868ac09c51.html?1932486891