java 泛型--子类-属性类型-重写方法-泛型擦除 练习

package 泛型练习03;
/**

  • 父类为泛型类
  • 1.属性
  • 2.方法
  • 注意:要么同时擦除,要么子类大于等于父类的类型
  • 不能子类擦除,父类还有泛型\
    
  • 1.属性类型
  •  父类中,随父类而定
    
  •  子类中,随子类而定
    
  • 2.方法重写
  •  随父类而定
    
  • @author Administrator

*/
public abstract class Father<T,T1> {//abstract抽象;Fathe父类
T name;//属性
public abstract void test(T t);//方法

}
/**

  • 子类使用指定具体类型

  • 属性类型为具体类型

  • 方法同理
    */
    class Child1 extends Father<String,Integer>{//Child子类;
    String t2;
    public void test(String t){//test测试

    }
    }
    /**

  • 子类为泛型类,类型在使用时确定;子类与父类泛型一致但位置可以不同

  • @author Administrator

*/
class Child2<T1,T> extends Father<T,T1>{//Child子类;
T1 t2;
public void test(T t){//test测试

}

}
/**子类为泛型类,父类不指定类型;泛型的擦除,使用object替换
*
*/

class Child3<T1,T2> extends Father{//Child子类;
T1 name2;
public void test(Object t){//test测试

}

}
/**

  • 子类与父类同时擦除
    */
    class Child4 extends Father{//Child子类;
    String name2;//这里只能使用指定类型
    public void test(Object t){//test测试

    }
    }
    /**

  • 错误方法:子类擦除,父类使用泛型
    /
    /
    class Child5 extends Father<T,T1>{//Child子类;子类擦除;编译 报错
    String name2;
    public void test(T t){//test测试

    }
    }*/
    //----------------------------------------------------------------
    package 泛型练习03;
    /**

  • 泛型接口与继承同理

  • 泛型没有多态:

  • 1.回顾:类与接口存在多态

  • 2.泛型没有多态

  •  如:1.直接使用;A<Object> a = new A<String>():错误
    
  •    2.方法形参与返回类型,也不存在泛型多态
    
  • 3.不能使用instanceof(运算符)判断是否为泛型实例:

  •  a instanceof A<String>
    
  • @author Administrator

*/
public interface Comparable {//Comparable比较
void compare(T t);
}
//声明子类指定具体类型
class Comp implements Comparable{//Comp比较器

@Override
public void compare(Integer t) {	
}

}
//擦除
class Comp1 implements Comparable{

@Override
public void compare(Object t) {//Comp比较器

}

}
//父类擦除,子类泛型
class Comp2 implements Comparable{

@Override
public void compare(Object t) {//Comp比较器
	
}

}
//子类泛型>=父类泛型
class Comp3 implements Comparable{

@Override
public void compare(T t) {

}

}
//---------------------------------------------------------
package 泛型练习03;
/**

  • 泛型的擦除
  •  1.继承;实现声明不指定类型
    
  •  2.使用时不指定类型
    
  • 统一Object 对待
  •  1.有编译器的警告,但对编译没有影响,消除使用Object
    
  •  2.不完全等同于Object,编译不会类型检查
    
  • @author Administrator

*/
public class Student {
private T javase;
private T oracle;

public T getJavase() {
	return javase;
}
public void setJavase(T javase) {
	this.javase = javase;
}
public T getOracle() {
	return oracle;
}
public void setOracle(T oracle) {
	this.oracle = oracle;
}


public static void main(String[] args) {
	Student stu1 = new Student();
	Student<Object> stu = new Student<Object>();//消除警告:加Object
	//stu.setJavase(stu);;//有警告  以Object 对待
	test1(stu1);
	test1(stu);
	test2(stu1);
	test2(stu);
}
//
public static void test1(Student<Object> a){
	
}
public static void test2(Student<?> a){
	
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值