java面向对象2(25) ​​​​​​​泛型二(高阶知识详解)

陌路散爱 提交于 2020-03-13 07:27:09

泛型二

一. 高级案例:接口上加泛型

不确定,接口中 方法的返回值类型、参数类型 。

 

//1、定义泛型:

public interface Animal<E> {
    void eat(E food);//参数不确定
    E run();//返回值类型不确定
}

 

//2、使用泛型:为泛型赋值

方式一:定义实现类时,为泛型赋值:

/**
 * 方式一:定义实现类时,为泛型赋值
 */
public class Dog implements Animal<String> {
    @Override
    public void eat(String food) {
        System.out.println("狗吃"+food);
    }
    @Override
    public String run() {
        return "自由地奔跑";
    }
}

 

 

 

方式二:定义实现类,创建实现类对象时,为泛型赋值

/**
 * 2、定义接口的实现类时无法确定泛型具体类型,
 *    等到创建对象时再为泛型赋值
 */
public class Person<E> implements Animal<E> {
    @Override
    public void eat(E food) {
        System.out.println("人吃:"+food);
    }
    @Override
    public E run() {
        return null;
    }
}

 

测试类:

public static void main(String[] args) {
    //创建对象时,为泛型赋值
    Person<String> p = new Person<>();
    p.eat("xxxx");
    p.run();
}

 

 

 

二. 泛型通配符

T,K,E….泛型字母:可以代表任意数据类型,可以使用在类,方法,成员变量

  • 概念:泛型通配符?,代表任意的数据类型。

  • 定义:无法在类中直接使用,定义在方法参数的泛型位置。

 

  • 使用:调用方法时可以给予任意类型。

      ? extends E代表只要是E类型,或者E类型的子类即可

 

 

 

? super E代表只要是E类型或者E类型的父类即可

 

 

泛型通配符,为了更细致地进行泛型规定。

 

 

 

今日总结:

泛型:标签。

用来标记容器中数据类型是什么?

 

可以将运行时期的异常,提升到编译时期

 

泛型:类、接口、方法。   使用

泛型通配符:

? extends T   传入的类型可以是T,也可以是T子类

? super T     传入的类型可以是T,也可以是T父类

 

 

 

 

 

请给努力中的自己点个赞哦!

每天进步一点点`~~~~~

​​​​​​​

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!