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){ } }
相关文章推荐
- 泛型子类_属性类型_重写方法类型
- 泛型第二课,派生子类、属性类型、方法重写、泛型擦除
- 重写PageStatePersister属性 自定义压缩方法来减小ViewState大小来优化页面加载时间
- 子类重写父类属性和方法
- 六.OC基础--1. id和instancetype类型,2.动态类型检测,3.响应方法,构造方法,4.重写构造方法,5.自定义构造方法
- java泛型学习-自定义泛型方法与类型推断总结
- javascript 自定义类型 属性,方法
- 重写UITableViewCell子类中属性的setter方法来实现隐藏或显示该cell中的某些控件
- 自定义数据类型 --- 类的属性和方法全解(swift2.3)
- 用户自定义类型作为T,来实现Dictionary,HashSet时,必须重写GetHashCode 方法
- Swift基础语法: 30 - Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写
- 浮点性(float)转化为字符串类型 自定义实现和深入探讨C++内部实现方法
- 子类与父类属性或方法重名时,使用super.(属性名/方法名)调用父类型属性或方法
- 116_容器_自定义泛型_泛型类_泛型接口_泛型方法_安全_省心
- 自定义泛型类型和方法
- 自定义泛型方法及其应用和类型参数的类型推断
- 泛型子类获取父类的模板类型方法
- java泛型-自定义泛型方法与类型推断总结
- HashSet中存方用户自定义数据类型数据,重写equals方法和hashCode方法
- 思想:java中,父类的方法中传入的形参的数据类型是泛型,子类的方法的形参想只要一种确定的数据类型,子类该如何做呢?