千锋教育-做有情怀、有良心、有品质的职业教育机构

当前位置:首页  >  IT问答库  >  Java基础知识

Java泛型继承原理与用法

发布:Java培训 2022-01-20 15:16

Java泛型继承原理与用法

推荐答案

      当创建了带泛型声明的接口、父类之后,可以为该接口创建实现类,或从该父类来派生子类,但值得指出的是,当使用这些接口、父类时不能再包含类型形参。

      如果使用泛型类时没有传入实际的类型参数,Java编译器可能发出警告:使用了未经检查或不安全的操作——这就是泛型检查的警告。

      实战——传入实际的类型参数

      public class A1 extends Apple<String> {

      // 正确重写了父类的方法,返回值

      // 与父类Apple<String>的返回值完全相同

      public String getInfo() {

      return "子类" + super.getInfo();

      }

      /*

      // 下面方法是错误的,重写父类方法时返回值类型不一致

      public Object getInfo()

      {

      return "子类";

      }

      */

      }

      实战——没传入实际的类型参数

      public class A2 extends Apple {

      // 重写父类的方法

      public String getInfo() {

      // super.getInfo()方法返回值是Object类型,

      // 所以加toString()才返回String类型

      return super.getInfo().toString();

      }

      }

      并不存在泛型类

      1、点睛

      虽然可以把ArrayList<String>类当成ArrayList的子类,事实上ArrayList<String>类也确实是一种特殊的ArrayList类,这个ArrayList<String>对象只能添加String对象作为集合元素。但实际上,系统并没有为ArrayList<String>生成新的class文件,而且也不会把ArrayList<String>当成新类来处理。

      实际上,泛型对其所有可能的类型参数,都具有同样的行为,从而可以把相同的类被当成许多不同的类来处理。与此完全一致的是,类的静态变量和方法也在所有的实例间共享,所以在静态方法、静态初始化、或者静态变量的声明和初始化中不允许使用类型形参。

      系统中并不会真正生成泛型类,所以instanceof运算符后不能使用泛型类。

      2、实战

      public class R<T>

      {

      // 下面代码错误,不能在静态变量声明中使用类型形参

      // static T info;

      T age;

      public void foo(T msg){}

      // 下面代码错误,不能在静态方法声明中使用类型形参

      // public static void bar(T msg){}

      }

      以上就是关于Java泛型继承原理与用法详解的全部内容。

最新问答资讯

01 unity用什么编程语言?unity学习难度大吗

学习 unity 语言
6020 人关注

02 python容易学吗?学好python有什么好处?

学习 python 工作 培训
5389 人关注

03 html是什么语言?html学习难吗?

学习 html 语言 可以
5062 人关注

04 c语言难学吗?c语言学好要多久?

语言 技术 学习
4733 人关注

06 学好平面设计要多久?报速成班靠谱吗?

平面 设计 学习 时间
4238 人关注

相关问题

计算机前端和后端区别,到底该学哪一个?

互联网行业的发展速度很快,有关市场上对于it行业的人才需求量越...

java和php的区别是什么?哪一个更难一些?

有很多零基础的小白想要去学习编程技术,那么可以考虑一下java和...

java与java script的区别有哪些?

相信大多数同学对java、java script都不会陌生,二者都是编程语...

java中什么是继承?

继承的特点:只需明确一点,java只支持单继承,不支持多继承,但...

java byte取值范围是什么?

同学您好,java byte取值范围是什么?针对这个问题可以看看下面的...

javascript和java有什么区别

1)基于对象和面向对象:Java是一种真正的面向对象的语言,即使是...

测一测
你知道多少IT梗