上传如何在Java中运行?

时间:2017-08-02 09:15:03

标签: java casting downcast upcasting

我接受了java中的向上转换和向下转换的概念,这也被称为扩展和缩小。

  • UpCasting(扩展)从派生类到基类自动发生。即如果它有一种关系。
  • 必须明确进行向下转换以进行运行时检查。

好的,我得到了概念和一切。但是,它在这种情况下如何运作?

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);

  • 这是通过upcast,String to object和Double to object,状态在objPair中存储。大.. !!!

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

  • 它如何记住字符串和double,扩展/ upcast应该记住超类状态和方法。
  • 如何访问子类类型和值?

4 个答案:

答案 0 :(得分:4)

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

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

因此,当它涉及打印对象的部分时,它只使用String.valueOf,它调用对象的toString()方法。从Object变量访问的实例实际上是String对象,而String会覆盖toString()以返回自身。 Double也会覆盖toString。调用这些覆盖,因为实例仍然是String的实例和Double的实例。只有参考是Object

请注意,您还有doubleDouble的演员阵容。这个隐式装箱更改对象 - 它需要一个原语并从中创建一个新的Double

答案 1 :(得分:1)

请注意:内存中的对象 它是什么。如果你创建了一个Double对象,那么它就是一个类似于数值的Double对象。

保存引用的变量使用超类型的事实根本不会影响引用的对象!

在您的示例中,自动装箱会在封面下创建一个Double对象,update your_table set cus_flag = 1 where cus_category like '%expansion%' and cus_category like '%exisitng%'; update your_table set cus_flag = 0 where cus_category like '%cleared%' and cus_category like '%former%'; 会返回对该 Double 对象的引用。

这就是全部。

答案 2 :(得分:0)

好的,就是这样,让我们​​举一个例子。你有一个大方框,名为Object和另一个小盒子。如果你把这个小盒子放在你的大盒子里面,小盒子和大盒子的所有属性都在大盒子里。 然后在小盒子里面有两根棍子,你把第一根棍子标记为'A',第二根棍子标记为'2.2'。 现在大盒子可以看到小盒子里面的东西。现在,在那一瞬间,小盒子有两根棍子,并按照它们的方式标记。 (记住Object类始终是java中每个类的超类/父级。)

答案 3 :(得分:0)

如果您只是测试此代码:

public class Main {

    public Object first;
    public Object second;


    public static void main (String[] args){
        Main a = new Main();
        a.first = new String("foo");
        a.second = 5;

        System.out.println(a.first.getClass().toString());
    }
}

输出class java.lang.String。您可以看到它没有存储为Object。这是通过使用元数据来实现的。