定义如下一个抽象的范型类,其中定义了两个范型参数,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中引入的主要目标是增强类型安全,减少强制类型转换,并帮助开发者编写更清晰、更易于...
### 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. **函数式编程**:...
11、java范型测试 12、常用JUC类:CountDownloadLatch,CylicBarrier、ReetrantLock等测试案例 13、自定义封装的并发工具类:ConcurrentAction 14、自定义限流注解和其他工具注解 15、AQS队列学习总结和测试 16、CAS...
在类的继承层次结构中,泛型也可以发挥作用。如果一个泛型类有一个带有类型参数的方法,那么这个方法在子类中仍然保留其类型参数,除非子类明确地指定类型。这样,子类可以进一步限制或扩展父类的类型参数。 总之,...
面向对象语言如Java、C++和Python提供了更高级别的抽象,提高了代码的重用性和可维护性,但执行效率相对较低。并发性支持良好,安全性能较高,比如通过垃圾回收机制减少悬挂指针的问题。面向对象语言的类型系统更加...
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中的继承使用关键字"extends",子类可以添加新的功能,或重写父类的方法。 4. 多态:多态是指同一消息可以被不同类型的对象响应。在Java中,多态主要通过方法的覆盖(Override)和接口实现来体现。它提供了灵活...
范型(generics)是Java 5引入的特性,用于提供类型安全的泛型容器。 3. **常用包**:Java中常见的包有`java.lang`(包含基本类型和对象的基类)、`java.util`(提供集合框架、日期时间API等)、`java.io`(输入...
在Java中,面向对象主要体现在类、对象、封装、继承和多态这五个核心概念上。 1. 类与对象:在Java中,类是创建对象的模板,定义了对象的属性(数据成员)和行为(方法)。对象则是类的实例,每个对象都有自己的...
Java是一种面向对象的编程语言,这意味着其核心设计思想是基于对象和类的。面向对象编程(Object-Oriented ...在实际编程中,理解并熟练运用类、对象、抽象、封装、继承和多态性,是成为高效Java开发者的必要条件。
- **面向对象**:Java 完全支持面向对象编程(OOP)原则,如封装、继承、多态等,这有助于创建可维护和可扩展的代码。 - **健壮性**:Java 设计时充分考虑了安全性和健壮性,比如自动内存管理机制可以防止内存泄漏等...