黑马程序员技术交流社区

标题: 求每一步的注释!3q! [打印本页]

作者: 十甫寸    时间: 2013-8-15 16:43
标题: 求每一步的注释!3q!
public class Mon
{
        public static void main(String[] args)
        {
                System.out.println("英文格式:"+Week.Mon);
                System.out.println("中文格式:"+Week.Mon.toLocaleString());
        }
        public enum Week
        {       
                Mon()
                {
                        public String toLocaleString()
                        {
                                return "星期一";
                        }
                };
                public abstract String toLocaleString();
        }
}

求每一步的注释!3q!
public abstract String toLocaleString();  这句话的作用是什么,为什么不能放在Mon()的上面?


作者: 会飞的狼    时间: 2013-8-15 16:52
public class Mon  //类名
{
         public static void main(String[] args)//主类
         {
                 System.out.println("英文格式:"+Week.Mon);
                 System.out.println("中文格式:"+Week.Mon.toLocaleString());
         }
         public enum Week //定义一个名为week的枚举
         {        
                /*枚举内部的成员mon,它是一个week的对象,全称:
                public static final Week Mon = new Week(){
                                      public String toLocaleString()
                         {
                                 return "星期一";
                         }
                   };*/


                Mon()   
                 {
                         public String toLocaleString()//这个是覆盖父类week中的接口toLocaleString()
                         {
                                 return "星期一";
                         }
                 };
                 public abstract String toLocaleString();//这个是接口,在枚举中常量成员要放在最前面
         }
}

作者: masterV    时间: 2013-8-15 16:57
本帖最后由 魏先勇 于 2013-8-15 16:59 编辑
  1. public class Mon
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 System.out.println("英文格式:" + Week.Mon);// Week.Mon打印时默认调用Enum类中的toString方法,打印出Mon
  6.                 System.out.println("中文格式:" + Week.Mon.toLocaleString());// 调用Mon中的toLocaleString()方法,打印返回的“星期一”。
  7.         }

  8.         public enum Week// 定义一个枚举类
  9.         {
  10.                 Mon()// 枚举类中只有一个实例:Mon
  11.                 {
  12.                         public String toLocaleString()// Mon重写了Week中的抽象方法toLocaleString();
  13.                         {
  14.                                 return "星期一";
  15.                         }
  16.                 };
  17.                 public abstract String toLocaleString();// 这个是枚举类Week中的抽象方法,当然不能写到实例Mon()中。
  18.         }
  19. }
复制代码
枚举类的知识在张老师的Java基础加强中有讲到,如果楼主对这块儿不熟悉的话可以看视频复习一下。


作者: sunriselzz    时间: 2013-8-15 17:55
引用张老师视频教程的讲解:
一. 知识概念概述: 通过enum定义枚举类,在其中列出所有同类的元素常量值作为子类的实例对象使用。
(1) 枚举类是一个特殊的类,每个元素都是该类的一个实例对象。
      用枚举类规定值,如上面的Week。以后用此类型定义的值只能是这个类中规定好的那些值,
     若不是这些值,编译器不会通过。好处:在编译时期就会发现错误,表明值不符合,减少了运行时期可能发生的错误。
    如果想在一个类中编写完每个枚举类和测试调用类,那么可将枚举类定义成调用类的内部类。
    枚举类是一个class,而且是一个不可被继承的final类,其中的元素都是类实例的静态常量。
(2) 构造器:构造器只是在构造枚举值的时候被调用。
    构造器只有私有private,绝不允许有public构造器。这样可以保证外部代码无法重新构造枚举类的实例,
    这样是合情合理的,因为枚举值是public static final的常量,但是枚举类的方法和数据域是可以被外部访问的。
    构造器可以有多个,调用哪个即初始化相应的值。
(3) 所有的枚举类都继承了Enum方法,方法如下:
        1) toString() ---> 返回枚举量的名称
        2) ordina() ---> 返回枚举值在枚举类中的顺序,按定义的顺序排
        3) getClass() ---> 获取对应的类名
    静态方法:
        1) valueOf(String e) ---> 转为类中对应的对象,即将字符串转为对象
        2) values() ---> 获取数组,将元素放入一个数组中。
(4) 注意:
    1、元素列表即所有的元素项目,必须放在整个类的最前面。
    2、元素列表后要有分号
    3、枚举类中的方法为private
    4、在元素后跟上(),就可指定要使用的构造方法,含参数。
    5、枚举类中的每个元素都是它的一个子类对象,当枚举类中存在abstract方法,须在子类后加{},
       并在其中实现此方法。
二. 代码注释:
  1. package cn.java.test;

  2. //定义一个类Mon
  3. public class Mon
  4. {                //主函数入口
  5.         public static void main(String[] args)
  6.         {                //枚举实例值是public static final的常量,可以通过枚举类名直接引用
  7.                 System.out.println("英文格式:"+Week.Mon);
  8.                 System.out.println("中文格式:"+Week.Mon.toLocaleString());
  9.         }
  10.         public enum Week
  11.         {       // 枚举列表成员MON必需在首句
  12.                 Mon()
  13.                 {                //实现枚举类中的抽象方法toLocaleString()
  14.                         public String toLocaleString()
  15.                         {                //返回值类型为String
  16.                                 return "星期一";
  17.                         }
  18.                 };
  19.                 //当枚举类中存在abstract方法时,须在子类MON后加{},并在其中实现此方法。
  20.                 public abstract String toLocaleString();
  21.         }
  22. }
复制代码





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