泛型之继承(泛型的上限)List<? extends Pet> list

package com.sxt.fanxing;

public class Pet {
	private String name;
	private int love;
	private int health;
	public Pet(){
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getLove() {
		return love;
	}
	public void setLove(int love) {
		this.love = love;
	}
	public int getHealth() {
		return health;
	}
	public void setHealth(int health) {
		this.health = health;
	}
	
}
package com.sxt.fanxing;


public class dog extends Pet {
	private String brand;
	public dog(String brand){
		super();
		this.brand=brand;
	}
	public dog(){
		super();
	}
	public String toString(){
		return "品种:"+brand;
	}
}


package com.sxt.fanxing;


import java.util.ArrayList;
import java.util.List;
/**
 * List<? extends pet> list
 * @author Administrator
 *
 */
public class Demo3 {
	public static void main(String[] args){
		List<dog> list=new ArrayList<>();
		list.add(new dog("哈士奇"));
		list.add(new dog("金毛"));
		printList(list);
	}
	//泛型的上限,因为父类的确定,只要是pet的任何子类,都可以使用这个方法
	public static void printList(List<? extends Pet> list){
		for(Pet pet:list){
			System.out.println(pet);
		}
	}
}

泛型

### 回答1: <? extends Father> 这种写法的意思是,List 中可以存放 Father 类及其子类的对象,而 Father 类型的对象则不能存放进去。 这个写法可以让 List 变得更加灵活,可以存放任意 Father 类型及其子类的对象,比如 Father 的子类 Son、GrandSon 等等。 ### 回答2: 在Java的泛型中,List<? extends Father>这样写的用途是为了使List能够接受Faher类及其子类的对象。?表示一个不确定的类型,而extends关键字限定了该类型必须是Father类或其子类。 使用List<? extends Father>的好处是能够提供更大的灵活性和可复用性。例如,假设有一个List<? extends Number>的列表,我们可以将其赋值为一个List<Integer>或List<Double>的对象,这样做可以使该列表接受更多不同类型的Number及其子类的对象。 另一个好处是能够实现协变。在Java中,数组是不可协变的,即不能将Integer数组赋值给Number数组。但是,使用List<? extends Father>创建的列表可以实现协变,即可以将List<Father>赋值给List<? extends Father>。这样做的好处是可以在方法参数中接受更多不同类型的Father及其子类的对象。 然而,使用List<? extends Father>也有一些限制。由于不确定具体的类型是Father的哪个子类,只能读取元素,而不能修改或添加元素。因为无法确定具体的类型是什么,所以在编译时期无法确定是否为合法的操作。这是为了保证类型安全和类型一致性。 综上所述,使用List<? extends Father>的好处在于提供了更大的灵活性和可复用性,实现了协变,同时也限制了对元素的修改和添加操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值