泛型
- 泛型是JDK5的新特性;泛型指广泛的类型,即类型参数化;
- 现多用于集合;
- 泛型擦除:
- 泛型只存在编译期,运行期就会消失;
- 泛型类:
- 定义:在定义类的时候在类名后面直接使用 < T > 形式指定泛型;
- 当子类继承一个泛型父类时,如果子类不是泛型类,则需要明确父类上的泛型参数;如果在子类继承泛 型父类时没有给父类指定泛型参数,则需要将子类也定义成泛型类,并且子类的泛型参数变量名要和父类 保持一致;
class Abc<T>{
private T t;
public void setObj(T t){
this.t=t;
}
public T getObj(){
return t;
}
- 泛型接口
- 定义:跟泛型类一致;
- 规则:和泛型类一致;
- 泛型方法
- 定义:public void show(T t){} / public static void show(T t){} (在静态方法的参数要使用类的泛 型时,静态方法也要加上泛型)
- 泛型通配符:?
- A类是B类的子类,G是带泛型声明的类或接口。则G<?> 是G < A > 、G < B > 的父类!
以List<?>为例:
能读取其中的数据。因为不管存储的是什么类型的元素,其一定是Object类的或其子类的。
不可以向其中写入数据。因为没有指明可以存放到其中的元素的类型!唯一例外的是:null - 泛型上限:List<? extends A>
可以将List< A >的对象或List< B >的对象赋给List<? extends A>,其中B 是A的子类; - 泛型下限:List<? super A>
可以将List< A>的对象或List< B >的对象赋给List<? super A>,其中B 是A的父类;
枚举(enum)
- 枚举就是一个由final修饰的、具有固定个数对象的class,默认继承Enum类
- 枚举类中也能定义普通的成员变量和方法
- 可以定义抽象方法,但需要在枚举类的每个对象都要重写其抽象方法
- 枚举对象的定义必须在第一行,后面还有声明必须加上分号
- 枚举类中也能定义构造器,但构造器默认是私有的
- 枚举类也实现接口,同时也要实现其抽象方法,可以在枚举类中实现为公共(所有对象共有)的方法,也可以在枚举对象中分别实现;
public class EnumTest {
public static void main(String[] args){
Teacher curry = new Teacher("Curry", Gender.MALE);
System.out.println(curry);
Gender male = Gender.valueOf("MALE");
Gender female = Gender.FEMALE;
Gender[] values = Gender.values();
System.out.println(male+"\t"+female+"\t"+ Arrays.toString(values));
}
}
enum Gender{
MALE,FEMALE
}
class Teacher{
String name;
Gender gender;
public Teacher(String name, Gender gender) {
this.name = name;
this.gender = gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void setGender(Gender gender) {
this.gender = gender;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
", gender=" + gender +
'}';
}
}
enum X{
X,XX,XXX;
}
//enum X等价于class Xx
class Xx{
private static final Xx X=new Xx();
private static final Xx XX=new Xx();
private static final Xx XXX=new Xx();
private Xx() {}
}