java自定义泛型类详解
1.自定义泛型类,泛型属性,泛型方法
public class Son <E> {
//<>里面是一个参数类型,目前不确定这个参数类型,<>相当于一个占位符,里面只传引用数据类型,而不是基本数据类型
int id;
String name;
E sex;
E ema;
public void a(E n){
System.out.println("定义泛型方法");
}
public void b(E [] m){
System.out.println("定义泛型数组");
}
}
1.1.实例化不指定泛型类型测试代码
class Test{
public static void main(String[] args) {
//实例化son 时不指定泛型类型进行实例化,
//不指定泛型类型时,为Object类型
Son s=new Son();
s.a("10");
s.a(20);
s.a(30.0);//调用自定义a方法
s.b(new String []{
"40","50"});//调用自定义泛型b方法
s.b(new Integer[]{
1,2,3});//
}
1.2实例化指定泛型类型测试代码
class Test1{
public static void main(String[] args) {
//指定泛型类型为String时,自定义泛型方法传入的参数只能为String类型,不能为Object类型
Son <String> s=new Son<String>();
s.a("123");
s.b(new String[]{
"1","2"});
}
}
实例化指定泛型类型和实例化不指定泛型类型的比较:
1指定泛型类型为了限制泛型
2不指定泛型类型时为Object类型无法限制泛型类型
2泛型继承关系
2.1父类指定泛型类型:父类指定泛型类型时,子类不需要指定泛型类型,直接使用即可
package hyh;
//父类
public class Son <E> {
int id;
String name;
E sex;
E ema;
public void a(E n){
System.out.println("定义泛型方法");
}
public void b(E [] m){
System.out.println("定义泛型数组");
}
}
//子类继承父类
class SonTest extends Son<Integer>{
//父类指定泛型---Integer
}
//测试类
class Test2{
public static void main(String[] args) {
SonTest son=new SonTest();
son.a(10);
son.b(new Integer[]{
1,2,3});
}
}
2.2父类不指定指定泛型类型:父类没有指定泛型类型时,子类实例化的时候可指定泛型类型
package hyh;
//父类
public class Son <E> {
int id;
String name;
E sex;
E ema;
public void a(E n){
System.out.println("定义泛型方法");
}
public void b(E [] m){
System.out.println("定义泛型数组");
}
}
//子类继承父类
class SonTest<E> extends Son<E>{
}
//测试类
class Test{
public static void main(String[] args) {
SonTest<String > str=new SonTest<String>();
str.a("1");
str.ema="2";
str.b(new String []{
"2,3,4"});
}
}
