可以说我们有以下代码:
class A {
public void doLogic() {
System.out.println("doLogic from A");
}
}
class B extends A {
@Override
public void doLogic() {
System.out.println("doLogic from B");
}
public void doDifferentLogic() {
System.out.println("doDifferentLogic from B");
super.doLogic();
}
}
class C extends B {
@Override
public void doLogic() {
System.out.println("doLogic from C");
}
}
public class Test {
public static void main(String[] args) {
C c = new C();
c.doDifferentLogic();
}
}
Run Code Online (Sandbox Code Playgroud)
当我们执行这段代码预期的行为是:由于C拥有一个参考对象C类的,当你调用c.doDifferentLogic()的JVM搜索在C类中的方法方法,因为它没有发现它开始盯着继承树.正如预期的那样,该doDifferentLogic()方法可以在超类中找到并执行.然而,构造super.doLogic()期望从当前引用的"Point of View"看起来是C类型的.因此C的超级应该是B,而是调用来自顶级A的方法.
如果删除 …
我一直在浏览我公司提出的Java面试问题,并遇到了一个我似乎无法找到解决方案的问题.
这是一个问题:
请编写一个方法(函数)接受一个字符串作为单个参数并反转该字符串中单词的顺序.
这" "是单词分隔符,任何其他char都被视为单词的一部分.为了简化,请考虑单词之间总是有一个空格.
重要 -你不要允许使用其他字符串或数组或其他数据结构包含几个要素-只是普通的原子变量,如整数,字符等.
此外,除了给出字符串长度的函数之外,不允许使用任何其他语言特定的字符串函数.
预期结果:
"hello my beautiful world" -> "world beautiful my hello"
Run Code Online (Sandbox Code Playgroud)
所以,我不能使用:chars[],str.split(),str.charAt(),str.substring(),StringBuilder,字符串的另一声明.
我应该使用递归来做吗?