泛型方法更加灵活,不受类的约束
比方法重载更加方便
class A<T>
{
public void printInfo(T t){
System.out.println(t);
}
}
class B<T>
{
public void printInfo(T t){
System.out.println(t);
}
}
public class Test {
public static void main(String[] args) {
A<String> a = new A<>();
a.printInfo("haha");
B b = new B();
b.printInfo("hah");
b.printInfo(111);
b.printInfo('1');
}
}
类A被规定为String后便只能输出字符串
B则灵活许多
对泛型方法进行限制
后面访问权限无法高于所继承的类
不用extends的话,代码中的T在编译时都会被重置为Object
class Animals
{
public void eat(){
System.out.println("动物吃");
}
}
class Dog extends Animals
{
public void eat(){
System.out.println("啃骨头");
}
}
class Cat extends Animals
{
public void eat(){
System.out.println("吃鱼肉");
}
}
class A<T>
{
public void printInfo(T t){
System.out.println(t);
}
}
class B
{
public <T> void printInfo(T t){
System.out.println(t);
}
public <T,T2> T printInfo(T t,T2 t2){
System.out.println(t);
System.out.println(t2);
return t;
}
public <T extends Animals> void printInfo2(T t){
t.eat();
}
}
public class Test {
public static void main(String[] args) {
A<String> a = new A<>();
a.printInfo("haha");
B b = new B();
b.printInfo("hah");
b.printInfo(111);
b.printInfo('1');
b.printInfo2(new Dog());
b.printInfo2(new Cat());
b.printInfo2(new Animals());
}
}