前言
多态是JAVA的三大特性之一,多态在JAVA中也有广泛的应用,本文简单介绍了JAVA中几种多态的应用场景供大家学习。
一、常用类
1.1集合中的add()方法可以添加任意类型的数据,原因是Object是所有数据类型的父类。
1.2当用增强for循环遍历集合时,使用Object类遍历所有元素
1.3String类中的valueOf(Object obj)方法
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
二、HttpServletRequest
RequestFacade实现了HttpServletRequest接口,tomcat自动把RequestFacade封装到HttpServletRequest中,多态(父类引用指向子类对象)
输出HttpServletRequest发现是tomcat的RequestFacade实现类(多态)
三、数据库驱动
JAVA定义了JDBC Driver接口,不同的数据库开发商按照规范实现该接口,这也是多态的一种表现形式(一个接口对应不同的实现类)。
// Mysql注册JDBC驱动程序
Class.forName("com.mysql.cj.jdbc.Driver");
//SqlServer注册JDBC驱动程序
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
四、新增创建线程方式
我们都知道实现Callable接口,需要借助FutureTask类来获取返回结果。FutureTask类实现了RunnableFuture接口,RunnableFuture继承了Runnable接口,所以FuturTask是继承了Runnable的类,可以当做Thread的参数。
public class FutureThread implements Callable<Integer> {
@Override
public Integer call() throws Exception { // //相比run()方法,1.可以有返回值 2.方法可以抛出异常 3.支持泛型的返回值
int i=0;
for (int j = 1; j <=1000; j++) {
if(j%2==1){
i+=j;
}
}
return i;
}
}
public class FutureTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//实现Callable接口与使用Runnable相比,Callable功能更强大些.
FutureThread f1=new FutureThread();
FutureTask<Integer>t1=new FutureTask<>(f1);
Thread myThread1=new Thread(t1); //FutureTask是继承了Runnable的类,所以可以当做Thread的参数
myThread1.start();
System.out.println("1-1000之内的奇数和是"+t1.get());//需要借助FutureTask类,获取返回结果
}
}
接口和抽象类常常都表现出多态的概念,因为存在继承和重写,一旦出现父类引用指向子类对象,都可以出现多态这种现象。
总结
本文简单的介绍了多态的几种应用场景,包括常用类的方法、HttpServletRequest的实现以及数据库驱动接口。接口与多态密切相关,由于接口可以有多个不同的实现类所以常常表现出多态性。