`
bit1129
  • 浏览: 1067918 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Java范型五】范型继承

 
阅读更多

定义如下一个抽象的范型类,其中定义了两个范型参数,T1,T2

 

package com.tom.lang.generics;

public abstract class SuperGenerics<T1, T2> {
    private T1 t1;
    private T2 t2;

    public abstract void doIt(T1 t1, T2 t2);

    public void sayHello() {
        System.out.println(t1);
        System.out.println(t2);
    }
}

 

定义一个实现了这个抽象范型的具体类

 

1. 子类携带父类的范型参数

 

package com.tom.lang.generics;


public class SubGenerics<T1, T2, T3> extends  SuperGenerics<T1, T2> {
    private T3 t3;
    
    @Override
    public void doIt(T1 t1, T2 t2) {
        System.out.println(t3);
    }
}

 

2. 子类不携带父类的范型参数,默认以Object代替

package com.tom.lang.generics;


public class SubGenerics<T1,T2,T3> extends  SuperGenerics {
    private T3 t3;

//    @Override //此处有编译错,因为@Override会让编译器认为SuperGenerics定义了类型为T1和T2的doIt方法
//    public void doIt(T1 t1, T2 t2) {
//        System.out.println(t3);
//    }

    @Override
    public void doIt(Object o1, Object o2) {

    }

    public static void main(String[] args){
        SubGenerics<String, Integer, Date> sg = new SubGenerics<String, Integer, Date>();
    }
}

 

3. 子类不携带父类的范型参数,但以指定的类型代替默认的Object

 

 

package com.tom.lang.generics;


public class SubGenerics<T1,T2,T3> extends  SuperGenerics<String, Integer> {
    private T3 t3;

    @Override
    public void doIt(String s, Integer integer) {
        //父类的范型参数变为String和Integer
    }
}

 

 

总结

1. 在范型继承中,作为让别人继承的父类,要写清楚这个类用了哪些范型,使用范型的目的是解决什么问题

2. 作为子类,要把父类的范型参数带上,不要使用默认的Object或者使用指定的类型

 

java.util.ArrayList范型集合类的定义

 

public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable

 可见,ArrayList把父类AbstractList的范型参数E带过来了

 

 接口:

 

上面针对superType和SubType定义的三点,对于接口完全适用,即当一个类实现一个接口,而接口是一个范型类时,三点处理的方式完全一样

 

 

 

 

 

分享到:
评论

相关推荐

    一个很好的范型立例题

    Java范型是Java编程语言中的一个重要特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的重用性和安全性。范型在Java中引入的主要目标是增强类型安全,减少强制类型转换,并帮助开发者编写更清晰、更易于...

    jdk1.5中的范型

    ### JDK 1.5 中的范型 #### 引言 自 JDK 1.5 开始,Java 语言正式引入了一项重要的特性——泛型(Generics),这使得 Java 成为了一个更为强大且灵活的语言。泛型允许开发人员编写出类型安全的通用类或方法,从而...

    主要程序设计语言范型综论与概要

    Java、C++ 和Python是广泛使用的面向对象语言。面向对象设计使代码更易于维护和扩展,提高了代码复用性。 4. **面向切面编程(AOP)**:AOP 是一种编程范型,旨在解决程序中的横切关注点,如日志、事务管理等,将...

    七周七语言 理解多种编程范型

    了解类、对象、继承、多态等概念,有助于我们构建模块化和易于维护的软件系统。 3. **过程式编程**:这种编程范型以过程为中心,强调程序是由一系列可执行步骤组成的。C 和 Pascal 是过程式编程的代表。学习过程式...

    七周七语言:理解多种编程范型 中文高清版

    2. **面向对象编程(OOP)**:OOP以对象为中心,通过封装、继承和多态性来组织代码。如Java和Python是OOP的典型示例。书中可能涵盖类的设计、对象的交互以及如何利用这些特性解决实际问题。 3. **函数式编程**:...

    Java源码,可运行的实战SpringBoot服务源码(实战中总结测试)

    11、java范型测试 12、常用JUC类:CountDownloadLatch,CylicBarrier、ReetrantLock等测试案例 13、自定义封装的并发工具类:ConcurrentAction 14、自定义限流注解和其他工具注解 15、AQS队列学习总结和测试 16、CAS...

    java 带两个类型参数的泛型

    在类的继承层次结构中,泛型也可以发挥作用。如果一个泛型类有一个带有类型参数的方法,那么这个方法在子类中仍然保留其类型参数,除非子类明确地指定类型。这样,子类可以进一步限制或扩展父类的类型参数。 总之,...

    浅谈程序设计语言中四种语言范型的区别.pdf

    面向对象语言如Java、C++和Python提供了更高级别的抽象,提高了代码的重用性和可维护性,但执行效率相对较低。并发性支持良好,安全性能较高,比如通过垃圾回收机制减少悬挂指针的问题。面向对象语言的类型系统更加...

    Thinking in java4(中文高清版)-java的'圣经'

    1.8 单根继承结构 1.9 容器 1.9.1 参数化类型(范型) 1.10 对象的创建和生命期 1.11 异常处理:处理错误 1.12 并发编程 1.13 Java与Internet 1.13.1 Web是什么 1.13.2 客户端编程 1.13.3 服务器端编程 1.22 总结 第...

    范型和仿函数在桌面系统中的应用

    这些仿函数可以作为参数传递给事件处理器,根据实际需求选择合适的处理逻辑,而无需复杂的条件语句或继承层次。 ### 泛型与仿函数的结合 泛型和仿函数的结合可以进一步增强代码的通用性和可扩展性。在桌面系统中,...

    Java面向对象教程

    Java中的继承使用关键字"extends",子类可以添加新的功能,或重写父类的方法。 4. 多态:多态是指同一消息可以被不同类型的对象响应。在Java中,多态主要通过方法的覆盖(Override)和接口实现来体现。它提供了灵活...

    Java经典题目_新手笔试使用

    范型(generics)是Java 5引入的特性,用于提供类型安全的泛型容器。 3. **常用包**:Java中常见的包有`java.lang`(包含基本类型和对象的基类)、`java.util`(提供集合框架、日期时间API等)、`java.io`(输入...

    java面向对象代码实例

    在Java中,面向对象主要体现在类、对象、封装、继承和多态这五个核心概念上。 1. 类与对象:在Java中,类是创建对象的模板,定义了对象的属性(数据成员)和行为(方法)。对象则是类的实例,每个对象都有自己的...

    Java 的核心是面向对象编程

    Java是一种面向对象的编程语言,这意味着其核心设计思想是基于对象和类的。面向对象编程(Object-Oriented ...在实际编程中,理解并熟练运用类、对象、抽象、封装、继承和多态性,是成为高效Java开发者的必要条件。

    JAVA经典题目.pdf

    - **面向对象**:Java 完全支持面向对象编程(OOP)原则,如封装、继承、多态等,这有助于创建可维护和可扩展的代码。 - **健壮性**:Java 设计时充分考虑了安全性和健壮性,比如自动内存管理机制可以防止内存泄漏等...

Global site tag (gtag.js) - Google Analytics