java做的对,dog是animal,animal不一定是dog

解决方案 »

  1.   

    如果是这样定义并初始化才可以。
    Animal a= new Dog("anim");
      

  2.   

    关于primitive类型的赋值问题,还有以下两个需要注意的问题:
    这段代码
    byte b = 1;
    short s = b;
    不会出错。因为,byte为8 bits, 而short为16 bits,将byte类型的数值赋予给short类型的变量不会引起数值精度问题。但是
    short s = 1;
    byte b = s;
    则不能正确编译。因为这样赋值可能导致s所含数值的高8 bit被舍弃,因而数值不正确。这样需要我们在写程序的时候指定
    byte b = (byte)s;以便通知编译器,"嘿, 如果有精度的损失,那是我自愿的,你不必担心!"这样编译就不会出错了。同样的,
    short s = 1;
    byte b = 1;
    b = b + s;
    不能正确编译。需要我们在写程序的时候指定
    b = (byte)(b + s);
    这些错误很多人现在都会避免了。但是这样子的代码是否会编译错误呢?
    short s = 1;
    byte b = 1;
    b += s;
    照以上的解释,你一定认为这段代码不能正确编译。但是如果你实际编译一下则会发现,它编译通过了!为什么呢?这是因为, +=, -=, *=, /=, %=这类操作符号比较特殊,对于编译器来说,他们相当于
    b += s; -------> b = (byte)(b + s);
      

  3.   

    hehe . 狗咬人士正常的,人咬狗就是反常。玩笑!
      

  4.   

    因为你是从animal 到 dog 
    是向下转型
      

  5.   

    Animal a= new ("anim"); // error
     Animal a= new Animal("anim");
      

  6.   

    只能向上转换,不能向下转换,不过对象可以上溯造型,下溯造型
    1. Dog d = new Dog("dog");
       Animal a = d;       //可以,上溯造型
    等同于: Animal a = new Dog("dog");2. Animal a = new Animal("anim");
       Dog d = (Dog)a;      //不可以3. Animal a = new Dog("dog");
       Dog d = (Dog)a;      //可以