Java泛型---泛型的继承

Java中泛型继承的使用方法与规则

/**
 * 泛型父类,子类的泛型指定数量要>=父类
 * 1.保留父类泛型--->子类为泛型子类
 * 2.不保留--->子类按需实现
 * 
 * 属性与方法类型由其定义位置决定
 * 1.子类重写的方法类型需要与父类方法定义的类型对应
 * 2.子类新增的方法类型由子类确定
 * 3.子类使用父类的属性随父类定义而定
 * 4.子类自己定义的属性由自己定义而定
 * @author Administrator
 *
 */
public abstract class GenericExtends<T1,T2> {
	T1 age;
	public abstract void test(T2 name);
}
//保留(泛型类的大写字母)--->子类为泛型子类
	//1.全部保留
class F1<T1, T2> extends GenericExtends<T1,T2>{

	@Override
	public void test(T2 name) {
		// TODO Auto-generated method stub
		
	}}
	//2.部分保留
class F2<T2> extends GenericExtends<Integer,T2>{

	@Override
	public void test(T2 name) {
		// TODO Auto-generated method stub
		
	}}
//不保留--->子类按需实现
	//1.具体类型
class F3 extends GenericExtends<Integer,String>{

	@Override
	public void test(String name) {
		// TODO Auto-generated method stub
		
	}}
	//2.没有类型(擦除,类似于Object)
class F4 extends GenericExtends{

	@Override
	public void test(Object name) {
		// TODO Auto-generated method stub
		
	}}

Java中,是一种强类机制,它可以让你在编译时检查类错误,从而提高代码的安全性和可读性。在使用时,我们经常会遇到父类子类转换问题。 首先,我们需要明确一点:子类不能转换成父类。这是因为Java中的是不协变的。例如,如果有一个类A和它的子类B,那么List<A>和List<B>之间是不存在继承关系的。 下面我们来看一个例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 } } ``` 在这个例子中,我们定义了Animal类和它的子类Dog。然后我们定义了两个List,分别是List<Animal>和List<Dog>。如果将List<Dog>赋值给List<Animal>,会出现编译错误。这是因为List<Animal>和List<Dog>之间不存在继承关系。 那么,如果我们想要让子类转换成父类,应该怎么办呢?这时我们可以使用通配符来解决问题。通配符可以表示任意类,包括父类子类。例如,我们可以将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类转换成父类了。 下面我们来看一个使用通配符的例子: ```java public class Animal { //... } public class Dog extends Animal { //... } public class Test { public static void main(String[] args) { List<Animal> list1 = new ArrayList<>(); List<Dog> list2 = new ArrayList<>(); list1 = list2; // 编译错误 List<? extends Animal> list3 = new ArrayList<>(); list3 = list2; // 正确 } } ``` 在这个例子中,我们定义了List<? extends Animal>来表示任意继承自Animal的类。然后我们将List<Dog>赋值给List<? extends Animal>,这样就可以实现子类转换成父类了。 总结一下,Java中的是不协变的,子类不能转换成父类。如果需要实现子类转换成父类,可以使用通配符来解决问题。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值