Java程序设计基础------类与对象(七)

最近在忙着参加学校里面的计算机设计大赛,没有时间写博客,今天终于把我们团队的作品提交到学校里了,后天开始答辩,预祝我们团队有个好成绩!这篇博客接着说Java中的泛型,泛型的实质就是将数据的类型参数化。泛型有三种方式实现,分别是泛型类,泛型方法,泛型接口。

泛型类

定义方法:【修饰符】 class 类名 <T>

实例:

package demo_practice;

public class Fanxing <T>{
    private T age;//定义泛型类的成员变量

    public Fanxing(){}//空参构造

    public Fanxing(T age) {//有参构造
        this.age = age;
    }

    public T getAge() {//定义泛型方法
        return age;
    }

    public void setAge(T age) {//定义泛型方法
        this.age = age;
    }


}

测试类:

package demo_practice;

public class DemoFanxing {
    public static void main(String[] args) {
        Fanxing <String> foo1 = new Fanxing<>();
        Fanxing <Integer> foo2 = new Fanxing<>();
        foo1.setAge("23");
        System.out.println(foo1.getAge());
        foo2.setAge(23);
        System.out.println(foo2.getAge());

    }
}

说明:

在泛型类的实例化的过程中,实际类型必须是引用类型;

一个方法是否是泛型方法与它所在的类是否是泛型类没有关系

泛型方法:

定义方式:【修饰符】 <T> 返回值类型 (T 参数)

实例:

package demo_practice;

public class Fanxing1 {
    private String name;

    public Fanxing1(String name) {
        this.name = name;
    }
    public Fanxing1(){}

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    public  <E> void print(E e){
        System.out.println(e);
    }


}

测试类:

package demo_practice;

public class Demofanxing1 {
    public static void main(String[] args) {
        Fanxing1 foo = new Fanxing1();
        foo.print("我是中国人!");
    }
}

说明;

在定义泛型方法时,返回值和至少一个参数类型时泛型,而且类型应该是一致的,,所以推荐使用返回值类型和参数类型都一致的泛型方法。

在调用泛型方法时,foo1.print("I am a Chinese")和foo1.<String>print("I am a Chinese")的作用时一致的

 泛型类中具有泛型方法:

实例:

package demo_practice;

public class Fanxing2 <T> {
    private T age;

    public Fanxing2(){}

    public Fanxing2(T age) {
        this.age = age;
    }

    public T getAge() {
        return age;
    }

    public void setAge(T age) {
        this.age = age;
    }
    public <E> void print(E e){
        System.out.println("泛型类的类型参数"+age.getClass().getName());
        System.out.println("泛型方法的类型参数"+e.getClass().getName());
    }
}

测试类:

package demo_practice;

public class Demofanxing2 {
    public static void main(String[] args) {
        Fanxing2<Integer> f = new Fanxing2<>();
        f.setAge(23);
        f.print("医学生");
    }
}

结果为:

限制泛型的可用对象:

对于泛型,Java也可以有一个限制,例如T必须是某个类的子类,就必须用extends,而不是implements

泛型不存在父子类的关系

泛型的通配符的概念:

通配符?的意义是:某个类是该类的子类或者是某个接口的实现类,具体是什么类型不知道。

例如:泛型类名 <? extends List> obj = null;

泛型经常与容器一起使用!!记住这一点就可以了

猜你喜欢

转载自blog.csdn.net/yanzhiguo98/article/details/88877420