普通方法弊端: 1、当接口内的值赋值错了(有两个值一样的值),那么相应的类的选择分支会报错* 2、当输入不在范围内的数据时,不会报错。
枚举类型:
values();--->可以将枚举类型成员以数组的形式返回。
Constants enumArray[]=Constants.values();
2. valueOf();--->可以将普通的字符串转换为枚举实例。
public enum Constants{ Constants_A } Constants c=Constants.valueOf("Constants_A");
注意:用此方法创建的枚举要真实存在,不然运行时会抛出(IllegalArgumentException)异常。
3. compareTo();--->该方法用于比较两个枚举对象在定义时的顺序。
public enum Constants{ Constants_A, Constants_B, Constants_C } /*
*将Constants_B与Constants_A、Constants_C进行compareTo方法。 *Constants_B.compareTo(Constants_A)=1 *Constants_B.compareTo(Constants_C)=-1 *Constants_B.compareTo(Constants_B)=0
*/
4. ordinal();--->用于得到枚举成员的索引位置。
public enum Constants{ Constants_A,//<---索引为0 Constants_B,//<---索引为1 Constants_C//<---索引为2 }
类型安全
紧凑有效的数据定义
可以和程序其他部分完美交互
运行效率高
父类 a=new 子类();--->向上转型,自动转型
子类 b=new 父类();--->java中不允许
如果要实现向下转型,需要以1为基础;--->子类 b=(子类)a;--->可能会发生数据缺失的问题。
语法:
/* *类名<类型参数1,类型参数2,...,类型参数n>{} *例如: */ public class Demo<T>{ T attribute; T method(T t){} } //注意:如果定义了泛型却不使用,Eclipse会发出警告
class ExtendClass<T>{ } //----->继承泛型类 class SubClass<T> extends ExtendClass<T>{ }
class TestInterface<T>{ } //----->继承泛型接口 class SubClass2<T> implements TestInterface<T>{ }
全部继承:
父类 abstract class Father<T1,T2>{} 全部继承 class Child<T1,T2,T3> extends Father<T1,T2>{}
2. 部分继承:
class Child<T1,A,B> extends Father<T1,String>{}
3. 实现父类泛型:
class Child<A,B> extends Father<Integer,String>{} //当子类去继承已经实现的父类泛型时,因为父类已经实现,所以子类根本没有继承父类的类型,即使子类有声明的泛型时,也是子类所独有的类型。
4. 不实现父类泛型
class Child extends Father{} //注意: 父类的所有类型的成员都被默认成为Object类型。
1.限制泛型的类型
语法:A<T extends anyClass>a;--->泛型必须是anyClass的子类
2.泛型通配符:限制泛型类型,并可以限制泛型对象的使用
语法:
A<?>a;
A<? extends anyClass>a;--->泛型必须是anyClass的子类,且此对象不能做增加和改写的操作
A<? super anyClass>a;--->泛型必须是anyClass的父类
原文:https://www.cnblogs.com/Aimblogs/p/12656628.html