关于多态、子类型、重载

三类多态

(1)特殊多态:当一个函数根据有限的单独指定的类型和组合,表示不同的和潜在的异质实现。许多语言都使用函数重载来支持特殊多态性。

(2)参数化多态:当代码编写时没有提到任何特定的类型,因此可以透明地用于任何数量的新类型。在面向对象的编程界,这通常被称为泛型或通用编程。

(3)子类型多态:当一个名字表示许多不同的类的实例被一些共同的父类所联系时。

特殊多态与重载:

当一个函数在几种不同的类型上工作时(这些类型可能没有表现出共同的结构),并在每种类型上表现出不相关的方式时,就会得到特殊多态性。
 

重载方法让你在一个类中重复使用相同的方法名称,但有不同的参数(也可选择不同的
返回类型)。
重载方法通常意味着你对调用你的方法的人好一点。因为你的代码承担了应对不同参数类型的负担,而不是强迫调用者在调用你的方法之前进行转换。

例如:doTask() 和 doTask(Object O)是重载方法。

重写与重载:

- 当一个方法被重写时,派生类中给出的新方法定义与基类中的参数数量和类型完全相同。
- 当一个派生类中的方法与基类中的方法有不同的参数/返回值时,这就是重载。
- 请注意,当派生类重载原始方法时,它仍然也继承了基类中的原始方法。

参数多态与泛型编程:

当一个函数在一系列类型上统一工作时,就会得到参数多态性;这些类型通常表现出一些共同的结构。
- 它是以通用方式定义函数和类型的能力,这样它就能根据运行时传递的参数来工作,即允许静态类型检查而不完全指定类型。
- 这就是Java中所谓的 "泛型(Generics)"。
泛型编程是一种编程风格,其中数据类型和函数是以待定类型的方式编写的,然后在需要时对作为参数提供的特定类型进行实例化。

 一个类型变量是一个不限定的标识符 。

- 它们是由泛型类声明、泛型接口声明、泛型方法声明和泛型构造器宣告。

如果一个类声明了一个或多个类型变量,它就是泛型的。

- 这些类型变量被称为类的类型参数。
- 它定义了一个或多个作为参数的类型变量。
- 一个泛型类的声明定义了一组参数化的类型,一个用于类型参数部分的每个可能的调用。
- 所有这些参数化类型在运行时共享同一个类。

如果一个接口声明了类型变量,那么它就是泛型的。
- 这些类型变量被称为接口的类型参数。
- 它定义了一个或多个作为参数的类型变量。
- 一个通用的接口声明定义了一组类型,对于类型参数部分的每个可能的调用都有一个。
- 所有参数化的类型在运行时共享同一个接口。

如果一个方法声明了类型变量,它就是泛型的。
- 这些类型变量被称为方法的正式类型参数。
- 正式类型参数列表的形式与类或接口的类型参数列表相同。

例(泛型类):

public class PapersJar<T> {
private List<T> itemList = new ArrayList<>();
public void add(T item) {
itemList.add(item);
}
public T get(int index) {
return (T) itemList.get(index);
}
public static void main(String args[]) {
PapersJar<String> papersStr = new PapersJar<>();
papersStr.add("Lion");
String str = (String) papersStr.get(0);
System.out.println(str);
PapersJar papersInt = new PapersJar();
papersInt.add(new Integer(100));
Integer integerObj = (Integer) papersInt.get(0);
System.out.println(integerObj);
}
}

子类型多态:

一个类型是一组值的集合。
- Java的List类型是由一个接口定义的。
- 如果我们考虑所有可能的 List 值,没有一个是 List 对象:我们不能创建一个接口的实例。
- 相反,这些值都是 ArrayList 对象,或 LinkedList 对象,或另一个实现 List 的类的对象。

 一个子类型只是超类型的一个子集。
- ArrayList和LinkedList是List的子类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值