如何在这里实现继承?

时间:2011-05-23 16:05:41

标签: java

这是一个简单的Java代码:

public class JTest {
    public static void main(String []args) {
        Integer a = new Integer(2);
        Object b = a;
        System.out.print("r = " + b);
    }
}

所有对象在Java中都有一个父对象。 当您运行此程序时,您将获得: r = 2 为什么? 如果我对这段代码做同样的事情:

public class JTest {
    public static void main(String []args) {
        A a = new A();

        Object b = a;
        System.out.print("r = " + b);
    }
}

A级是:

public class A {
    int a;
}

输出将是: r = test.A@9304b1

7 个答案:

答案 0 :(得分:6)

Integer.toString()返回一个包含整数值的字符串。

您的类没有实现自己的toString(),因此它使用默认的Object.toString()实现,该实现返回对象类及其哈希码的组合。

答案 1 :(得分:4)

它将调用调用了哪个方法的toString()方法。如果未实现的Object类默认提供一个。

尝试通过这种方式覆盖它并检查输出

public class A {
    int a;
    @Override 
    public Sring toString(){
         return "A has property a = "+this.a;
    }
}

答案 2 :(得分:3)

在第一个实例中,b包含Integer的实例,因此在打印中调用toString()的{​​{1}}实现。

在第二种情况下,Integer包含b的实例,因此调用了A的{​​{1}}实现。大概toString()不会覆盖A,因此您从A(package.Class@hash)获得默认实现。

编辑(自问题发生变化):

班级toString()仅包含Object字段,但不会展开A。如果您更改int以覆盖toString(您无法扩展原始类型,如int),您可以得到您想要的内容:

A

答案 3 :(得分:1)

执行System.out.print("r = " + b);时,Java将调用b.toString()。方法toString继承自Object。在第一种情况下,类Integer会覆盖toString以返回整数值。您的A类不会丢失toString(),因此您只获得默认值(对象类和哈希码)

答案 4 :(得分:1)

顺便说一句,如果你想要来获取已经覆盖toString()的类型的java.lang.Object样式输出,你可以使用这样的代码:

public static String toString(Object o) {
  if (o == null) return null;
  return o.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(o));
}

答案 5 :(得分:0)

在第一个实例中,Object有一个toString方法,因此将打印实际值。但是,如果没有像第二个实现那样的toString方法,则会获得类似于类/对象的ID

的类型

答案 6 :(得分:0)

在第一种情况下,Integer类有一个'toString'方法,当与“r”+ b结合使用时,会给你一个'a'的文本表示,它将是2