多态与泛型:
泛型作为方法参数:
Goods类:
package com.imooc.generic;
public abstract class Goods {
public abstract void sell();
}
Book类:
package com.imooc.generic;
public class Book extends Goods {
@Override
public void sell() {
System.out.println("sell books");
}
}
Shoes类:
package com.imooc.generic;
public class Shoes extends Goods {
@Override
public void sell() {
System.out.println("sell shoes");
}
}
Clothes类:
package com.imooc.generic;
public class Clothes extends Goods {
@Override
public void sell() {
System.out.println("sell clothes");
}
}
GoodsSeller类:
package com.imooc.generic;
import java.util.List;
public class GoodsSeller {
//关键步骤
public void sellGoods(List<? extends Goods> goods) {
//调用集合中的遍历方法
for (Goods g:goods) {
g.sell();
}
}
}
测试代码:
package com.imooc.generic;
import java.util.ArrayList;
import java.util.List;
public class GoodsTest {
public static void main(String[] args) {
// 定义book相关的list
List<Book> books = new ArrayList<Book>();
books.add(new Book());
books.add(new Book());
// 定义book相关的list
List<Clothes> clothes = new ArrayList<Clothes>();
clothes.add(new Clothes());
clothes.add(new Clothes());
// 定义book相关的list
List<Shoes> shoes = new ArrayList<Shoes>();
shoes.add(new Shoes());
shoes.add(new Shoes());
GoodsSeller goodsSeller = new GoodsSeller();
goodsSeller.sellGoods(books);
}
}
输出结果:
sell books
sell books
自定义泛型:
测试代码1:
package com.imooc.generic;
//泛型类定义
public class NumGeneric<T> {
private T num;
public T getNum() {
return num;
}
public void setNum(T num) {
this.num = num;
}
public static void main(String[] args) {
NumGeneric<Integer> intNum = new NumGeneric<>();
intNum.setNum(10);
System.out.println("Integer:"+intNum.getNum());
NumGeneric<Float> floatNum = new NumGeneric<>();
floatNum.setNum(10.0f);
System.out.println("Float:"+floatNum.getNum());
}
}
输出结果:
Integer:10
Float:10.0
测试代码2:
package com.imooc.generic;
public class TwoNumGeneric<T,X> {
private T num1;
private X num2;
public void genNum(T num1,X num2) {
this.num1 = num1;
this.num2 = num2;
}
public T getNum1() {
return num1;
}
public void setNum1(T num1) {
this.num1 = num1;
}
public X getNum2() {
return num2;
}
public void setNum2(X num2) {
this.num2 = num2;
}
public static void main(String[] args) {
TwoNumGeneric<Integer,Float> numObj = new TwoNumGeneric<>();
numObj.genNum(25, 5.0f);
System.out.println("num1 = "+numObj.getNum1());
System.out.println("num2 = "+numObj.getNum2());
}
}
输出结果:
num1 = 25
num2 = 5.0
自定义泛型方法:
代码1:
package com.imooc.generic;
//泛型方法不一定写在泛型类里面
public class GenericMethod {
//泛型方法
public<T> void printValue(T t) {
System.out.println(t);
}
public static void main(String[] args) {
GenericMethod gm = new GenericMethod();
gm.printValue("hello");
gm.printValue(1);
gm.printValue(2.0);
}
}
输出结果:
hello
1
2.0
测试2:
代码:
package com.imooc.generic;
//泛型方法不一定写在泛型类里面
public class GenericMethod {
//泛型方法
public<T extends Number> void printValue(T t) {
System.out.println(t);
}
public static void main(String[] args) {
GenericMethod gm = new GenericMethod();
// gm.printValue("hello");
gm.printValue(1);
gm.printValue(2.0);
}
}
输出结果:
1
2.0
总结: