难度级别: 中等
程序
程序一
1) 以下程序的输出是什么?
class A { public A(String s) { System.out.print("A"); } } public class B extends A { public B(String s) { System.out.print("B"); } public static void main(String[] args) { new B("C"); System.out.println(" "); } }
程序二
2) 以下程序的输出是什么?
class Clidder { private final void flipper() { System.out.println("haiyong"); } } public class Clidlet extends Clidder { public final void flipper() { System.out.println("HAIYONG"); } public static void main(String[] args) { new Clidlet().flipper(); } }
程序三
3) 以下程序的输出是什么?
class Alpha { static String s = " "; protected Alpha() { s += "alpha "; } } class SubAlpha extends Alpha { private SubAlpha() { s += "sub "; } } public class SubSubAlpha extends Alpha { private SubSubAlpha() { s += "subsub "; } public static void main(String[] args) { new SubSubAlpha(); System.out.println(s); } }
}
程序四
4) 以下程序的输出是什么?
public class Juggler extends Thread { public static void main(String[] args) { try { Thread t = new Thread(new Juggler()); Thread t2 = new Thread(new Juggler()); } catch (Exception e) { System.out.print("e "); } } public void run() { for (int i = 0; i < 2; i++) { try { Thread.sleep(500); } catch (Exception e) { System.out.print("e2 "); } System.out.print(Thread.currentThread().getName()+ " "); } } }
程序五
5) 以下程序的输出是什么?
class Grandparent { public void Print() { System.out.println("Grandparent's Print()"); } } class Parent extends Grandparent { public void Print() { System.out.println("Parent's Print()"); } } class Child extends Parent { public void Print() { super.super.Print(); System.out.println("Child's Print()"); } } public class Main { public static void main(String[] args) { Child c = new Child(); c.Print(); } }
文章后半部分是程序的输出及解析
输出及解析
程序一输出
输出: 编译失败
prog.java:12: error: constructor A in class A cannot be applied to given types; { ^ required: String found: no arguments reason: actual and formal argument lists differ in length 1 error
说明:
B 的构造函数中隐含的 super() 调用无法满足,因为 A 中没有无参数构造函数。仅当类没有显式定义的构造函数时,编译器才会生成默认的无参数构造函数。
程序二输出
输出:
HAIYONG
说明:
虽然不能覆盖 final 方法,但在这种情况下,该方法是私有的,因此是隐藏的。结果是创建了一个新的、可访问的方法翻转器。因此,在这个例子中没有发生多态,调用的方法只是子类的方法,不会发生错误。
程序三输出
输出:
alpha subsub
说明:
SubSubAlpha 扩展了 Alpha!由于代码不会尝试创建 SubAlpha,因此 SubAlpha 中的私有构造函数是可以的。
程序四答案
输出
无输出
说明:
在 main() 中,start() 方法从未被调用来启动“t”和“t2”,因此 run() 从未运行过。
程序五答案
输出 :
编译器错误在 super.super.Print()
说明:
在 Java 中,不允许执行 super.super。我们只能使用 Parent 访问祖父母的成员。
以上就是本篇文章的所有内容了