这个沮丧的人如何运作:(B)super.clone()?

时间:2013-08-07 06:04:57

标签: java oop inheritance clone downcast

class A { 

}
public class B extends A {

public static void main(String[] args) {
     A m = new A();
     B n = (B)m;
}
}

此代码无法遵守。但是,在下面的代码中,这种向下倾斜有效。

 class A { 

}
public class B extends A implements Cloneable{

@Override
public B clone() throws CloneNotSupportedException {
return (B)super.clone();
}
public static void main(String[] args) {
     B m = new B();
     B n = m.clone();
}
}

那么,为什么这个垂头丧气?

=============纠错============================

抱歉,我的错误应该是B n = **(B)**m;,而不是B n = m;。 我非常抱歉。我已经在上面的代码中纠正了它。

2 个答案:

答案 0 :(得分:1)

即使在第一种情况下 - ;         A级{

       }
    public class B extends A {

    public static void main(String[] args) {
     A m = new A();
   //  B n = m;
     B n = (B)m;
   }  
     }

这是工作。

答案 1 :(得分:0)

什么? 你不能把A加到B,不管你说的是什么 如果A延伸B而不是B可以作为A和B的分支,但A不能是B的实例。