java - 这个沮丧的:(B)super.克隆()如何工作?

标签 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;。 我很抱歉。我已经在上面的代码中更正了它。

最佳答案

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

       }
    public class B extends A {

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

工作了。

关于java - 这个沮丧的:(B)super.克隆()如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18095781/

相关文章:

java - 从抽象 Activity 传递 View

java - 在 O(n^2) 中查找数组中的所有三元组

java - 将 JavaBeans 编码为多种格式

java - 是否可以在 JBoss Drools 的同一程序中引用 .drl 和 .xls 中的规则?

Python类实例变量隔离

c# - 类型参数约束是一个类

java - Android : How to OnConflictStrategy. 替换但保留一个特定字段

c# - 有没有更好的方法从派生类的抽象基类调用派生类的重写方法?

javascript - 如何在 JavaScript 中建模这个数据结构? (AngularJS)

python - 如何基于父类(super class)更改子类的属性