本帖最后由 syusikoku 于 2014-3-7 20:57 编辑
- public abstract class WeekDay {
- //方法是抽象的类也要做成抽象的。
- // 创建一个对象,该对象的值只能是固定的那几个值
- // 就意味着别人不能创建对象我们自己可以创建对象
- // 所以第一步我们就要先把构造函数私有化
- private WeekDay() {
- }
- // 别人不能创建对象,我们自己可以创建对象
- /* public final static WeekDay SUN = new WeekDay();
- public final static WeekDay MON = new WeekDay();
- */ //我们抽取了方法之后,这里就不能再这样创建对象了。
- //new WeekDay(){} 它是WeekDay的子类。它是没有名字的对象。
- //是匿名内部类。它要实现父类中的抽象方法
- public final static WeekDay SUN = new WeekDay(){
- @Override
- public WeekDay nextDay() {
- // TODO Auto-generated method stub
- return MON;
- }
- };
- public final static WeekDay MON = new WeekDay(){
- @Override
- public WeekDay nextDay() {
- // TODO Auto-generated method stub
- return SUN;
- }
- };
- /*// 枚举类中变量的值只能是引用数据类型的值不能是基本数据类型的值
- // 枚举类中有变量也可以有方法
- public WeekDay nextDay() { // 这个是每个变量上的方法所以不能做成静态的
- if (this == SUN) {
- // 如果当前的对象==SUN变量所指向的引用数据类型的变量
- return MON;
- } else {
- return SUN; // 方法返回的数据类型也是引用数据类型
- }
- }*/
- public abstract WeekDay nextDay(); //把它给做成抽象的方法
- // 我们要想打印出来一些信息提示用户就要覆盖toString方法
- // 这个toString方法要由创建类的人来覆盖。如果不覆盖别人在打印该类的时
- // 候打印的就是该对象在堆内存中的地址值
- //我们想打印枚举对象,想显示给别人看打印出来的结果,得由定义这个类的人来编写toString方法
- //得由设计这个类的人去覆盖toString方法。
- public String toString() {
- return this == SUN ? "SUN" : "MON";
- //如果当前的对象是SUN,就返回字符串SUN,如果不是就返回MON
- }
- }
- public class EnumTest {
- public static void main(String[] args) {
- //MON这个常量是一个对象,它是WeekDay里面的WeekDay类型的对象
- //因为MON是WeekDay类型的对象,所以我们可以把它赋值给WeekDay类型的引用变量
- //如果我们要想给WeekDay赋值,只能使用我们在WeekDay里面定义好的那些常量
- WeekDay weekday = WeekDay.MON;
- System.out.println(weekday); //在打印对象时,会自动调用对象的toString方法
- System.out.println(weekday.nextDay());
- }
- }
复制代码
|
-
A.PNG
(157.18 KB, 下载次数: 7)
-
B.PNG
(176.9 KB, 下载次数: 4)
-
C.PNG
(124.92 KB, 下载次数: 5)
|