网站首页 > java教程 正文
在面试过程中,我们经常会被问到Java语言是如何实现面向对象的多态特性的?继承算不算是多态呢?
封装、继承、多态是面向对象的三大基本特征,而其中多态这个特性是很难理解的一个特性,那么下面我们就来介绍一下在Java中是如何实现多态的?
什么是多态?
在编程语言中几乎每个面向对象的编程语言都会对多态做详细的介绍,并且对多态进行详细的分类,那么多态到底是什么呢?
其实,多态就是指可以为不同数据类型的实体提供统一的接口实现的方式。或者说可以使用同一个简单的符号来标识多个不同的数据实体类型。一般情况下,多态可以分为如下的几种。
- 特设多态:为某个实体的特定类型的任意集合操作定义的公共接口实现。也就是对多态函数来讲,有多个不同的实现,而其依赖于实际参数调用的具体的版本函数。其实方法重载就是一种特设多态实现。
- 参数多态:参数多态在程序设计语言与类型论中是指声明与定义函数、复合类型、变量时不指定其具体的类型,而把这部分类型作为参数使用,使得该定义对各种具体类型都适用。参数多态其实也有很广泛的应用,比如Java中的泛型就是参数多态的一种。参数多态另外一个应用比较广泛的地方就是函数式编程。
- 子类型:一个名字可以代指很多的不同类型的实例,并且这些类有某个共同的超类
Java中的多态
Java中的多态相对来说比较容易理解,就是可以将同一个操作作用于不同的对象,并且产生不同的执行结果。Java中的多态更多的是指运行过程中所表现出来的状态,为了实现这样的多态效果,在Java中需要满足如下的几个条件
- 有类继承关系或者是存在接口实现操作
- 子类中重写了父类中的方法
- 在父类中引用了指向子类的对象
public class Father{
public void call(){
System.out.println("Father");
}
}
public class Son extends Father{// 1.有类继承或者接口实现
public void call(){// 2.子类要重写父类的方法
System.out.println("Son");
}
}
public class Daughter extends Father{// 1.有类继承或者接口实现
public void call(){// 2.子类要重写父类的方法
System.out.println("Daughter");
}
}
public class Test{
public static void main(String[] args){
Father p = new Son(); //3.父类的引用指向子类的对象
Father p1 = new Daughter(); //3.父类的引用指向子类的对象
}
}
通过上面的代码我们理解了关于Java中实现多态三个要素。这里重点介绍一下第三点。也就是在代码中提到的父类的引用指向子类对象,在Spring IOC中,在我们使用IOC容器中的对象的时候不需要管它具体是哪个,在具体操作的过程中就会指向需要执行的对象。这个与上面提到的第三点相似。所以IOC容器其实就是利用了Java多态的特性来为我们提供这样的便利的。
什么是静态多态?
在上面我们提到的都是动态多态?也就是说在运行过程中才体现出来,那么什么是静态多态呢?一般来讲,在Java中我们可以将方法的重载看做是一种静态的多态。因为在这种方式实现的多态需要在编译的时候就来决定具体调用哪个方法。所以说在运行期间,我们已经知道了具体传入的参数是哪个,所以在真正去调用的时候,实际上已经是一个确定的方法了。并没有像是在我们上面代码中提到在运行期间在具体表现某个实现。所以被称为是静态的多态。这种的静态多态在面向对象的编程语言中还是比较常见的。
猜你喜欢
- 2024-09-27 Java多态重载和重写(类方法设计中多态与重载的区别是什么)
- 2024-09-27 什么是多态?Java为什么要用多态?(java中什么是多态性)
- 2024-09-27 别找了!月薪30k的T6大佬整理的Java多态知识点总结,限时收藏
- 2024-09-27 三十一、Java面向对象编程特性-多态
- 2024-09-27 Java多中包括态理解、多态实现、重写、转型和抽象类
- 2024-09-27 Java中的封装、继承和多态,你真的都懂了吗
- 2024-09-27 java基础之多态与向上转型,很用心的一篇笔记
- 2024-09-27 Java多态的介绍-学习日志(java的多态是什么)
- 2024-09-27 Java路径-25-Java多态(java路径错误)
- 2024-09-27 Java中的多态(基础语法)(java多态的定义和应用)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)