我是从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
答案 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);
将按照您的预期运作。