作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在以下哪种情况下我会得到输出“Hello World”?
class A{
@Override
public String toString() {
return "Hello World";
}
}
public class B extends A{
public void print(){
//replace code that displays "Hello World"
}
public static void main(String args[]){
new B().print();
}
}
我。 System.out.println(new A());
二. System.out.println(new B());
III.System.out.println(this);
1. only I
2. I and III
3. I and II
4. all I,II and III
其答案是4
,即所有I、II和III
我理解 I,但为什么 II 和 III 也是正确的?
编辑:还指定 jls 的哪一部分提供此规范?
最佳答案
B 类是 A 类的扩展,因此 B 继承了 A 类的所有方法(即 B 的 toString() 也将返回“Hello World”)。这就是为什么当您在 B 类对象(即 this 和 new B())上调用 print() 时,它会说“Hello World”。
如果您希望 B 类返回不同的字符串,则必须再次重新定义/覆盖 B 类中的 toString() 函数。
关于java - 如果子类没有覆盖被父类(super class)覆盖的字符串,输出是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18275584/
我是一名优秀的程序员,十分优秀!