您的位置:首页 > 其它

117_容器_自定义泛型_深入1_子类_属性类型_重写方法类型_泛型擦除

2017-08-04 08:45 381 查看


泛型的继承

泛型类的继承

package genericity_excends;
/**
* 泛型父类,子类为富二代
* 1、保留父类泛型 -->子类为泛型
* 2、不保留父类泛型 -->子类按需实现
*
* 属性 及方法 类型 -->随位置而定
* 1)、子类重写方法的类型 -->随父类而定
* 子类新增方法的类型 -->随子类而定
* 2)、子类中使用父类的属性 -->随父类而定
* 子类中使用自己的属性 -->随子类而定
* @author bj
*
*/
public class Class_Extends{
public abstract class Father<T1,T2> {
T1 age;
public abstract void test(T2 name);

}

//保留  -->泛型子类
//1)、全部保留
class Child1<T1,T2,A,B> extends Father<T1,T2>{
T1 age;//this.age -->T1
A Sex;

@Override
public void test(T2 name) {
}

public void test2(B b){
}
}

//2)、部分保留
class Child2<T2,A,B> extends Father<Integer,T2>{
Integer age;//this.age -->Integer
A Sex;

@Override
public void test(T2 name) {
}

public void test2(B b){
}
}

//不保留  -->按需实现
//1)、具体类型
class Child3 extends Father<Integer,String>{
Integer age;//this.age -->Integer

@Override
public void test(String name) {
}
}

//2)、没有类型 擦除 Object
@SuppressWarnings("rawtypes")
class Child4 extends Father{
Object age;//this.age -->Object

@Override
public void test(Object name) {
}
}
}


泛型接口的继承(实现)

package genericity_excends;

public interface Interface_Extends {
/**
* 泛型接口的继承 与 泛型类  同理
*/
public interface Comparator<T> {
//全局常量
public static final int MAX_VALUE=100;
//公共抽象方法
public abstract void test(T t);
}

//实现
@SuppressWarnings("rawtypes")
class InterC1<A> implements Comparator{//擦除类型-->Object
@Override
public void test(Object t) {
}
}
class InterC2<A> implements Comparator<Integer>{
@Override
public void test(Integer t) {
}
}
class InterC3<T,A> implements Comparator<T>{
@Override
public void test(T t) {
}
}
}


泛型的擦除

定义一个泛型类
MyStudent<T>


package genericity_erase;
/**
* 自定义泛型类
* 1、<> -->单个大写字母,尽可能见名知意
* 2、
* T :Type
* K V :Key Value
* E :Element
*
* 3、注意点:
* 泛型不能使用在静态属性上
* 指定的类型不能为基本类型
*/
// T -->type 类型
public class MyStudent<T> {
private T javase;
//private static T test; //泛型不能使用在静态属性上
public MyStudent() {
}

public MyStudent(T javase) {
this.javase = javase;
}

public T getJavase() {
return javase;
}

public void setJavase(T javase) {
this.javase = javase;
}
}


泛型擦除的测试类

package genericity_erase;

public class MyStudentImpl {
/**
* 泛型的擦除: 使用时 |实现|继承 没有指定类型 ,
* 类似于 Object ,不等同于 Object
*/
@SuppressWarnings("unchecked")
public static void main(String[] args) {
//擦除 -->没有指定 泛型的具体类型
@SuppressWarnings("rawtypes")
MyStudent student =new MyStudent();
student.setJavase(100); //100 -->int -->Integer -->Object
Object obj=student.getJavase();
System.out.println(obj);

test(student);//编译不会类型检查
@SuppressWarnings("unused")
MyStudent<Object> student2 =new MyStudent<Object>();
//不等于 Object
//test(student2);
}

public static void test(MyStudent<Integer> stu){
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐