我正在使用Java中的上转换和下转换的概念,这也称为扩大和缩小。


UpCasting(Widening)从派生类自动转换为基类。即它是否具有is-a关系。
向下转换必须明确进行以进行运行时检查。


好的,我了解了概念和所有内容。但是,在这种情况下它如何工作?

public class ObjPair {
    Object first;
    Object second;

    public ObjPair(Object first, Object second) {
        this.first = first;
        this.second = second;
    }

    public Object getFirst() {
        return first;
    }
    public Object getSecond() {
        return second;
    }

    public static void main(String[] args) {
        ObjPair objPair = new ObjPair("A",2.2); // Goes widning conversion
        System.out.println(objPair.getFirst());
        System.out.println(objPair.getSecond());
    }
}



  ObjPair objPair =新的ObjPair(“ A”,2.2);



这是通过向上转换,从字符串到对象,从双精度到对象,状态存储在objPair中。大..!!!


现在,当我执行objPair.getFirst()和objPair.getSecond()时。它返回我A和2.2。


它如何记住字符串和双精度字,加宽/转换应该记住超类的状态和方法。
如何访问子类的类型和值?

最佳答案

转换对象引用不会更改对象。它只是允许将其分配给其他类型的引用。对象本身保持不变。

在您的情况下,它需要两个Object引用,它检查兼容性(在那里没有问题),然后在Object类型的变量中设置引用。实例本身不会更改。如果它们具有覆盖Object的方法,则将调用覆盖方法。

因此,当涉及到打印对象的部分时,它仅使用String.valueOf,它调用对象的toString()方法。从Object变量访问的实例实际上是一个String对象,并且String覆盖toString()以返回自身。 Double也将覆盖toString。调用这些替代,因为该实例仍然是String的实例和Double的实例。仅引用为Object

请注意,您还从double强制转换为Double。这种隐式装箱确实会更改对象-它采用原语并从中创建新的Double

09-26 10:01