package com.test;
public class Main {
public static void main(String[] args) {
System.out.println(new B().toString());
}
}
package com.test;
class A {
@Override
public String toString() {
// TODO Auto-generated method stub
return this.getClass().getName();
}
}
package com.test;
public class B extends A {
}
该程序给出输出 com.test.B 但如果我将 A 类的 toString 方法更改为
@Override
public String toString() {
return "hello";
}
然后它打印你好。为什么?
最佳答案
在第一次函数调用时,方法是:
@Override
public String toString() {
// TODO Auto-generated method stub
return this.getClass().getName();
}
由于此方法是从 B 类实例调用的,因此 this.getClass()
引用 B
类对象。因此 getName()
函数打印
com.test.B
如果通过创建A
类对象来调用相同的函数,那么输出将是,
com.test.A
当您将 toString
函数更改为:
@Override
public String toString() {
return "hello";
}
它将返回 hello
,因为您已返回 hello
作为返回值。
现在,如果您确实想了解@Override
,请将此代码添加到B类中,并在A类中让返回hello
的函数存在
@Override
public String toString() {
// TODO Auto-generated method stub
return this.getClass().getName();
}
尝试上面的代码,并从类 A 和类 B 实例对象调用 toString
函数。那么就会更清楚@Override
的作用以及它是如何工作的
关于java - 解释以下 Java 程序的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19923712/