枚举类可以实现接口吗(C语,枚举常量的值是怎么定义的呀) |
您所在的位置:网站首页 › 枚举变量的值可以是整数或字符串吗 › 枚举类可以实现接口吗(C语,枚举常量的值是怎么定义的呀) |
本文目录C语,枚举常量的值是怎么定义的呀关于java枚举的疑惑Java语言中的枚举类型如何使用Java 中 Enum 如何继承java里什么情况用枚举啊C#枚举器的实现接口java枚举类的几点疑惑枚举和类的异同枚举型的类型相容和赋值相容枚举能继承类或接口吗C语,枚举常量的值是怎么定义的呀 枚举(从JDK1.5开始有) 用于代表”实例已经固定“的类,而且定义时就必须在【第一行】创建初始化并列出来。 语法格式: 修饰符 enum 枚举名{ //立即在第一行列出该枚举的所有实例。 } —— 修饰符 可以是 public | 省略 | abstract | final。 abstract与final必须出现其中一个。 —— 枚举的构造器只能用private修饰。 —— 枚举类的实例必须在第一行显式的列出。所有的枚举都有一个values()方法,返回枚举实例 switch(byte|short|char|int|String|枚举)●有了枚举之后,它的实例已经创建出来了,只需要用它们就行了。●枚举可以有Field,方法,构造器(只能是private修饰),初始化块,内部类。 列出枚举值,并不是简单的定义几个枚举值的变量名。 而是调用枚举类的构造器来创建相应的实例。 定义枚举的方法时要非常小心,●包含抽象方法的枚举类●枚举可以实现接口。 A。实现接口,并直接实现所有的抽象方法。 此时枚举类不再是抽象枚举了。B。实现接口,但并不直接实现抽象方法。 此时枚举类就只能是抽象枚举类。 关于java枚举的疑惑首先Enumeration是一个接口,不是类,你想使用,就做个类实现它。java.util.Enumeration不过它其实不是传统意义上的枚举类型,他是用来访问某些集合类的接口,类似Iterator散列与向量用Enumration,链表与树集用IterationTestEnum和Enum没有关系,枚举是不能继承一个类或其他枚举的。只能实现接口。你能使用values是因为你声明TestEnum是enum,不是因为TestEnum继承自谁。你是不是认为你没写values,还能使values,是因为TestEnum继承自某一个类似于object的公共基类?不是这样。values方法是你指定Enum这种类型后,编译器为你实现的。另外,使用java,最好不要使用枚举。那是面向过程编程遗留的数据类型。其实并不符合oop思想。完全可以用类来代替它。 Java语言中的枚举类型如何使用Java语言中的枚举类型的使用方法如下: 用法一:常量; public enum Color { RED, GREEN, BLANK, YELLOW } 用法二:switch; enum Signal { GREEN, YELLOW, RED } public class TrafficLight { Signal color = Signal.RED; public void change() { switch (color) { case RED: color = Signal.GREEN; break; case YELLOW: color = Signal.RED; break; case GREEN: color = Signal.YELLOW; break; } } } 用法三:向枚举中添加新方法; public enum Color { RED(“红色“, 1), GREEN(“绿色“, 2), BLANK(“白色“, 3), YELLO(“黄色“, 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 普通方法 public static String getName(int index) { for (Color c : Color.values()) { if (c.getIndex() == index) { return c.name; } } return null; } // get set 方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } 用法四:覆盖枚举的方法; public class Test { public enum Color { RED(“红色“, 1), GREEN(“绿色“, 2), BLANK(“白色“, 3), YELLO(“黄色“, 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 覆盖方法 @Override public String toString() { return this.index + “_“ + this.name; } } public static void main(String args) { System.out.println(Color.RED.toString()); }} 用法五:实现接口; public interface Behaviour { void print(); String getInfo(); } public enum Color implements Behaviour { RED(“红色“, 1), GREEN(“绿色“, 2), BLANK(“白色“, 3), YELLO(“黄色“, 4); // 成员变量 private String name; private int index; // 构造方法 private Color(String name, int index) { this.name = name; this.index = index; } // 接口方法 @Override public String getInfo() { return this.name; } // 接口方法 @Override public void print() { System.out.println(this.index + “:“ + this.name); } } 用法六:使用接口组织枚举。 public interface Food { enum Coffee implements Food { BLACK_COFFEE, DECAF_COFFEE, LATTE, CAPPUCCINO } enum Dessert implements Food { FRUIT, CAKE, GELATO }} 以上就是Java语言中枚举类型的基本使用方法。 Java 中 Enum 如何继承Java Enum是不能继承的,以下是解释: 枚举类使用enum定义后在编译后默认继承了java.lang.Enum类,而不是普通的继承Object类。enum声明类继承了Serializable和Comparable两个接口。且采用enum声明后,该类会被编译器加上final声明(同String),故该类是无法继承的。枚举类的内部定义的枚举值就是该类的实例(且必须在第一行定义,当类初始化时,这些枚举值会被实例化)。 Java 5新增的enum关键词,可以定义枚举类。该类是一个特殊的类,可以定义自己的field、方法、可以实现接口,也可以定义自己的构造器。 java里什么情况用枚举啊目的:为了解决类型不安全提出的 使用:当我们在类中要指定选项必须为某些类型时,就要考虑用到枚举,这是jdk1.5之后才提出的。类型安全的枚举类型简介: 1)enum:可以定义一个类型,而且还可以限制该类型的取值在某个范围内 2)语法:enum enumName{枚举值1,...,枚举值n} 3)适用位置:包中、类中,但不能在方法中 4)注意: 1.所有的enum类型都继承自java.lang.Enum; 2.自定义的enum类型不能再有子类; 3.枚举类型的取值默认为public static final; 4.枚举类型中可以定义属性和方法; 5.构造器必须是私有的; 6.枚举类型的取值就是其实例对象,它会调用该枚举类型的构造器,还要实现枚举类型中所有的抽象方法; 7.枚举类型可以实现其它接口; C#枚举器的实现接口实现 IEnumerator 接口注意到ListBoxEnumerator不仅需要实现IEnumerator接口,对于ListBox类它也需要一些特别了解;特别是,它必须可以获得ListBox的字符串数组并且遍历其所包含的字符串。IEnumerable 类和与其相关的 IEnumerator类之间的关系有一点微妙。实现IEnumerator接口的最好办法是在IEnumerable类里创建一个嵌套的IEnumerator类。public class ListBox : IEnumerable{// 嵌套的私有ListBoxEnumerator类实现private class ListBoxEnumerator : IEnumerator{// 代码实现...}// ListBox类的代码...}注意ListBoxEnumerator需要对它所嵌入的ListBox类的一个引用。你可以通过ListBoxEnumerator的构造函数来传递。为了实现IEnumerator接口,ListBoxEnumerator需要两个方法:MoveNext和Reset,还有一个属性:Current。这些方法和属性的任务是创建一个状态机制,确保你可以在任何时候得知ListBox中的哪个元素是当前元素,并获得那个元素。在这个例子中,这种状态机制是通过维护一个标明当前string的索引值来完成的,并且,你可以通过对外部类的string集合进行索引来返回这个当前的string。为了达到这个目标,你需要一个成员变量保存对于外部ListBox对象的引用,以及一个整型用于保存当前索引。private ListBox lbt;private int index;每次Reset方法被调用的时候,index被置为 -1。public void Reset(){index = -1;}每次MoveNext被调用的时候,外部类的数组检查时候已经到了末尾,如果是这样,方法返回false。如果集合中还有对象,index将增加,并且方法返回true。public bool MoveNext(){index++;if (index 》= lbt.strings.Length){return false;}else{return true;}}最后,如果MoveNext方法返回True,foreach循环将调用Current属性。ListBoxEnumerator的Current属性的实现是索引外部类(ListBox)中的集合,并且返回找到的对象(这个例子中,是一个字符串)。注意,返回一个Object是因为IEnumerator接口中Current属性的签名如此。public object Current{get {return(lbt);}}在1.1中,所有想要通过foreach循环来迭代的类都需要实现IEnumerable接口,于是,必须创建一个实现了IEnumerator的类。最糟的是,enumerator返回的值并不是类型安全的。记得Current属性返回一个Object对象;它仅仅简单的假设你所返回的值与foreach循环所期望的相符合。 java枚举类的几点疑惑先看一个简单的枚举类。package enumcase;public enum SeasonEnum { SPRING,SUMMER,FALL,WINTER;}enum和class、interface的地位一样使用enum定义的枚举类默认继承了java.lang.Enum,而不是继承Object类。枚举类可以实现一个或多个接口。枚举类的所有实例都必须放在第一行展示,不需使用new 关键字,不需显式调用构造器。自动添加public static final修饰。使用enum定义、非抽象的枚举类默认使用final修饰,不可以被继承。 枚举和类的异同枚举是java 5新增了一个menu关键字(它与class、interface关键字的地位相同),用于定义枚举,枚举是一种特殊的类,它一样有自己的Fileld、方法,可以实现一个或多个接口,也可以定义自己的构造器。一个java源文件中最多只能定义一个public访问权限的枚举类,且该java源文件也必须和枚举类的类名相同。但枚举毕竟不是普通的java类,它与普通类有如下简单的区别: 1、枚举类可以实现一个活多个接口,使用menu定义的枚举直接继承了java.long.Enum类,而不是继承Object类。其中java.long.Enum类实现了java.long.Serializable和java.long.Comparable两个接口。 2、使用enum定义、非抽象的枚举默认修饰符为final,因此枚举不能派生子类。 3、枚举的构造器只能使用private访问控制符,如果省略了枚举的访问修饰符其默认为private修饰;如果加强制定访问修饰符则只能使用private。 4、枚举的所有实例必须在枚举的第一行显示列出,否则这个枚举永远都不能生产实例,列出这些实例时系统会自动添加public static final修饰,无需程序员显式添加 5、所有的枚举类都提供了一个values方法,该方法可以很方便的遍历所有的枚举值 枚举型的类型相容和赋值相容1.类型相容性类型相容是对参加同一运算的两个对象的类型要求。设有两个变量,如果满足下列条件之一,就说这两个变量的类型相容。(1)两个变量的类型相同a.两个变量被同一类型说明。例如:var a,b:1..30;b.两个变量的类型是同一类型标识符。例如:var a:1..30; b:1..30;c.两个变量的类型是不同的类型标识符,但在类型定义中已经说明两个标识符相同。例如:type date=1..100; range=date;var m:data;n:range;(2)一个变量的类型是另一个变量的子界。(3)两个变量的类型都是同一基类型的子界。(4)两个变量的类型是基类型相容的集合类型。(5)两个变量的类型是成分相同的串类型。2.赋值相容性赋值相容是对赋值操作的两个对象的类型要求。设赋值语句“:=”左边的变量类型为T,右边表达式的类型为E,若类型T和类型E满足下列条件之一,则称他们是赋值相容的。(1)T和E是相同的类型,而且类型不是文件类型,也不是具有文件类成分的构造类型。(2)T是实型,而E是整型或整型的子界。(3)T和E是类型相容的顺序类型,并且E的值不超出T所定义的值的范围(4)T和E是类型相容的集合类型,并且E的值不超出T所定义的值的范围(5)T和E是类型相容的串类型。当T和E是顺序类型或都是集合类型时,不仅要求这两个类型是相容的,而且要求E的值不超出T所定义的值的范围;否则将产生类型溢出,而这种错误只能在你运行程序时进行检查,因此你必须要避免不发生这种错误。在java中枚举类型一般定义格式如下:enum 枚举类名 {清单对象1, ;}java中的枚举类可以有构造函数、可以实现接口,但不能继承任何类,其在编译以后默认继承jdk内部的枚举类。 枚举能继承类或接口吗1 枚举的定义 :一个特殊的java类,对象的某个属性的值不能是任意的,必须为固定的一组取值其中的某一个接口的定义:定义对象的扩展功能,是在继承之外还需这个对象具备的一些功能2 上面的定义中说明了枚举是一个特俗的java类,既然是一个java类,那么就可以继承接口。3 下面的用java代码来展示枚举继承接口的方式 ://定义一个枚举:public enum Suit { CLUBS, DIAMONDS, HEARTS, SPADES }public interfacel SuitImp{}//接口//枚举实现接口的代码public enum Suit implements SuitImp() |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |