Java打印使用println方法继承对象

时间:2017-03-13 03:45:51

标签: java inheritance

我是从python到java的第一步,这是我对许多Java问题的第一步有疑问。

通过缩短的打印方法进行打印时,我遇到了继承类返回值的问题。我确信Java的一些简单之处我还没有完成。我还尝试将println方法接收的任何整数转换为带有.tostring()的字符串,但我不确定这是否正确。

class Inheritance {

    private static void println (Object line){
        System.out.println(line.toString());
    }

    static class A {
        public int multiply(int a, int b){
            int val = a*b;
            return val;
        }
    }

    static class B extends A {
        public int multiply(int a, int b) {
            int val = a * b * 5;         
            return val;
        }
    }

    public static void main(String[] args) {
        B b_class = new B();
        b_class.multiply(3,4);

        println(b_class);
        println("Hello World");

    }
}

输出如下:

Inheritance$B@74a14482
Hello World

3 个答案:

答案 0 :(得分:1)

对于 Java toString方法,默认情况下

  

返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:

getClass().getName() + '@' + Integer.toHexString(hashCode())

https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString()

所以当你打印b_class时,它会打印:Inheritance$B@74a14482

对于你的println (Object line)它正在接收引用类型(对象)来println,但是作为multiply方法它返回一个原始类型(int),它不是一个对象,您需要将其转换为println方法的对象,因为@ StanteyS的答案,使用Integer.toString可以转换{ {1}}至int

What's the difference between primitive and reference types?

答案 1 :(得分:1)

您可以使用println

中的方法
public static void main(String[] args) {
        B b_class = new B();

        println(Integer.ToString(b_class.multiply(3,4)));
        println("Hello World");

    }

答案 2 :(得分:1)

当您隐式执行println(b_class);时,它会调用同一类的toString方法,该方法继承自Object类。

您需要覆盖toString方法才能显示正确的输出。

static class B extends A {
  int val=0;
    public int multiply(int a, int b) {
        val = a * b * 5;         
        return val;
    }
  public String toString(){
   return String.valueOf(val); 
   }
}

现在,println(b_class);将按照您的预期运作。