黑马程序员技术交流社区

标题: 关于 enmu 中的构造函数与abstract方法的关系 [打印本页]

作者: First    时间: 2013-6-4 20:03
标题: 关于 enmu 中的构造函数与abstract方法的关系
  1. import java.lang.reflect.Constructor;

  2. public class Demo {

  3. /**
  4. * @param args
  5. */
  6. public static void main(String[] args) {
  7. // TODO Auto-generated method stub
  8. //WeekDay
  9. Class clazz = WeekDay.MON.getClass();//@0 用getClass()获得的构造函数是一个
  10. //?1: 为何是一个? 为何会少掉构造函数?少掉了哪些构造函数?
  11. Constructor[] cons = clazz.getDeclaredConstructors();
  12. System.out.println("共有 "+cons.length+" 个构造函数");
  13. for (Constructor con : cons) {
  14. System.out.println(con.toGenericString());
  15. }

  16. Class clazz1 = WeekDay.class;//@1 与@0 相比 用 .class 的方法却获得3个。
  17. //?2: 为何是3个 ,多出来的那个构造函数是什么意思? ?3: 为何与@0 不同?
  18. Constructor[] cons1 = clazz1.getDeclaredConstructors();
  19. System.out.println("共有 "+cons1.length+" 个构造函数");
  20. for (Constructor con : cons1) {
  21. System.out.println(con.toGenericString());
  22. }

  23. System.out.println();
  24. //Weekday1
  25. Class clazz2 = Weekday1.MON.getClass();//@2 与@0 相比 该方法enum 没有 abstract 方法, 获得的构造函数却是2个
  26. Constructor[] cons2 = clazz2.getDeclaredConstructors();
  27. System.out.println("共有 "+cons2.length+" 个构造函数");
  28. for (Constructor con : cons2) {
  29. System.out.println(con.toGenericString());
  30. }

  31. Class clazz3 = Weekday1.class;//@3 比较WeekDay 和 Weekday1,WeekDay仅多了一个abstract方法。
  32. //说明WeekDay 之所以会多出或少掉构造函数是因为 abstract 方法
  33. //?4:为何WeekDay 和 Weekday1 会有这样的差异?或者为何abstract方法会造成这样的差异
  34. Constructor[] cons3 = clazz3.getDeclaredConstructors();
  35. System.out.println("共有 "+cons3.length+" 个构造函数");
  36. for (Constructor con : cons3) {
  37. System.out.println(con.toGenericString());
  38. }

  39. }
  40. }


  41. enum WeekDay{
  42. SUN(){
  43. public WeekDay nextDay(){
  44. return MON;
  45. }
  46. },MON(){
  47. public WeekDay nextDay(){
  48. return SUN;
  49. }
  50. };

  51. WeekDay(){
  52. System.out.println("first");
  53. }
  54. WeekDay(int x){
  55. System.out.println("second");
  56. }

  57. public abstract WeekDay nextDay();
  58. }

  59. enum Weekday1{
  60. SUN,MON;

  61. Weekday1(){
  62. System.out.println("first");
  63. }
  64. Weekday1(int x){
  65. System.out.println("second");
  66. }

  67. }


  68. /*输出结果为:
  69. first
  70. first
  71. 共有 1 个构造函数
  72. test.WeekDay$$$$2(java.lang.String,int)
  73. 共有 3 个构造函数
  74. private test.WeekDay(java.lang.String,int,int)
  75. private test.WeekDay(java.lang.String,int)
  76. test.WeekDay(java.lang.String,int,test.WeekDay)

  77. first
  78. first
  79. 共有 2 个构造函数
  80. private test.Weekday1(java.lang.String,int,int)
  81. private test.Weekday1(java.lang.String,int)
  82. 共有 2 个构造函数
  83. private test.Weekday1(java.lang.String,int,int)
  84. private test.Weekday1(java.lang.String,int)

  85. */
复制代码
问题就是 ?1:?2:?3:?4

作者: 刘海陆    时间: 2013-6-5 14:44
看看看看看看看看看看看看看看看看看看看看看看看看




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2