Super 程序題

2018-07-03 14:35 更新

題目一

  1. class Base{
  2. Base(){
  3. System.out.println("Base");
  4. }
  5. }
  6. public class Checket extends Base{
  7. Checket(){
  8. System.out.println("Checket");
  9. super();
  10. }
  11. public static void main(String argv[]){
  12. Checket a = new Checket();
  13. }
  14. }

輸出是什么? 是 compile time error. super() 必須放在前面.

放在前面之后,輸出為 Base Checket

題目二

  1. import java.util.Date;
  2. public class Test extends Date{
  3. public static void main(String[] args) {
  4. new Test().test();
  5. }
  6. public void test(){
  7. System.out.println(super.getClass().getName());
  8. }
  9. }

返回的結(jié)果是 Test

因為super.getClass().getName() 調(diào)用了父類的 getClass() 方法, 返回當前類

如果想得到父類的名稱,應該用如下代碼:

  1. getClass().getSuperClass().getName()

題目三

  1. public abstract class Car {
  2. String name = "Car";
  3. public String getName(){
  4. return name;
  5. }
  6. public abstract void demarre();
  7. }
  8. public class B extends Car{
  9. String name = "B";
  10. public String getName(){
  11. return name;
  12. }
  13. public void demarre() {
  14. System.out.println(getName() + " demarre");
  15. }
  16. }
  17. public class C extends B{
  18. String name = "C";
  19. public String getName(){
  20. return name;
  21. }
  22. public void demarreWithSuper() {
  23. System.out.println(super.getName() + " demarre");
  24. }
  25. public void demarreNoSuper() {
  26. System.out.println(getName() + " demarre");
  27. }
  28. }
  29. public class D extends B{
  30. public String getName(){
  31. return name;
  32. }
  33. public void demarreNoSuper() {
  34. System.out.println(getName() + " demarre");
  35. }
  36. }
  37. public class Test {
  38. public static void main(String[] args) {
  39. B b = new B();
  40. b.demarre();
  41. Car bCar = new B();
  42. bCar.demarre();
  43. C c = new C();
  44. c.demarre(); // c 里并沒有定義這個函數(shù)
  45. c.demarreWithSuper();
  46. c.demarreNoSuper();
  47. D d = new D();
  48. d.demarre();
  49. transfer(c); // TransferC
  50. transfer((B)c); // TransferB
  51. transfer(d); // TransferB
  52. }
  53. public static void transfer(B b){
  54. System.out.println("TransferB");
  55. b.demarre();
  56. }
  57. public static void transfer(C c){
  58. System.out.println("TransferC");
  59. c.demarre();
  60. }
  61. }
  62. }

輸出是 B demarre B demarre C demarre B demarre C demarre B demarre TransferC C demarre TransferB C demarre TransferB B demarre

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號