「java多态性基础」java多态性是什么
本篇文章给大家谈谈java多态性基础,以及java多态性是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中多态性什么意思?
- 2、java中构成多态的前提是什么?
- 3、JAVA基础多态性~!!
- 4、北大青鸟设计培训:java多态的总结?
- 5、java中什么是多态性?它具有什么优点
- 6、运行时实现Java的多态性
java中多态性什么意思?
多态性:顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态。
在JAVA中有两种多态是指:运行时多态和编译时多态。多态性是面向对象的核心特征之一,类的多态性提供类中成员设计的灵活性和方法执行的多样性。
多态指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
扩展资料:
多态的好处:
1、可替换性(substitutability)多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2、可扩充性(extensibility)多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
3、接口性(interface-ability)多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4、灵活性(flexibility)它在应用中体现了灵活多样的操作,提高了使用效率。
5、简化性(simplicity)多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。
参考资料:百度百科-多态
java中构成多态的前提是什么?
java中实现多态需要三个条件:
1,需要有继承关系的存在。
2,需要有方法的重写。
3,需要有父类的引用指向子类对象。
java学习推荐你来北京尚学堂,雄厚的师资力量带给你不一样的学习体验,在分享一下java学习的路线,希望对你有所帮助:
一、JavaSE基础阶段
面向对象编程(基础)
面向对象编程(进阶)
异常机制
Java常用类
数据结构和算法
集合(容器)
IO流
多线程
网络编程
集合提升训练
多线程提升训练
二、数据库阶段
MySQL基础
MySQL 查询语句
数据库对象
JDBC
反射和注解
数据库建模和UML建模
设计模式
三、WEB前端
JavaScript
jQuery
BootStrap
Vue
四、JavaEE阶段 (核心阶段)
HTTP/Tomcat
MVC 架构
Servlet
JSP
EL+JSTL+过滤器+监听器
Ajax和JSON
分页和文件上传/下载
五、JavaEE阶段(高级框架)
Spring 5.2.2
SpringMVC 5.2.2
RBAC
EasyUI 1.7.0
支付/短信验证
六、框架强化
Linux - CentOS 8
Maven
Logback
Quartz
Spring Boot 2.2.2
Shiro
Swagger
Git/GitEE
MyBatis
七、分布式架构
Zookeeper
RPC
Dubbo
Redis
Solr
RabbitMQ
FastDFS
Nginx
Spring Security
Spring Session
MyBatis Generator
Mycat
八、微服务阶段
ElasticSearch
MongoDB
Spring Cloud Netflix Eureka
Spring Cloud Netflix Ribbon
Spring Cloud OpenFeign
Spring Cloud Netflix Hystrix
Spring Cloud Config
Spring Cloud Gateway
Docker
K8S
JAVA基础多态性~!!
1 多态包括方法的多态和对象的多态
2 方法的多态主要是指方法的重写和重载。
3 我在这里主要解释一下对象的多态:一个对象,多种形态。
4 对象多态的基础: 子类对象可以当做父类对象来看.
例如:Animal a= new Bird();
5 对象多台的核心定理:
a。 如果我们吧子类对象当做父类对象来看,那么我们就只能访问负累中已有定义的属性和方法(不能访问子类扩展的属性和方法)
b。 如果子类吧负累的方法覆盖了,在把子类对象当做负累对象来看,去调用该方法,调用的是覆盖之后的方法(子类中定义的方法)。
6 例如:Animal接口里面有一个eat ()方法
现在有俩个实现类 horse 和 tiger 类。这俩个类分别重写了eat()方法
现在我们new 俩个对象
如: Animal animal1= new horse(); animal1.eat();
调用的就是马的eat方法。执行结果是马吃草;
Animal animal2 = new tiger() ;animal2.eat();
这里调用的就是老虎的eat方法,执行结果就是老虎吃肉;
北大青鸟设计培训:java多态的总结?
父类引用指向子类对象是Java比较基础的概念。
Java作为一门面向对象编程的语言,调用对象是在编程中经常用到的。
北大青鸟为大家详细说明这一概念。
例如父类Animal,子类Cat,Dog。
其中Animal可以是类也可以是接口,Cat和Dog是继承或实现Animal的子类。
Animalanimal=newCat();即声明的是父类,实际指向的是子类的一个对象。
那这么使用的优点是什么,为什么要这么用?可以用这几个关键词来概括:多态、动态链接,向上转型。
也有人说这是面向接口编程,可以降低程序的耦合性,即调用者不必关心调用的是哪个对象,只需要针对接口编程就可以了,被调用者对于调用者是完全透明的。
让你更关注父类能做什么,而不去关心子类是具体怎么做的,你可以随时替换一个子类,也就是随时替换一个具体实现,而不用修改其他。
以后结合设计模式(如工厂模式,代理模式)和反射机制可能有更深理解。
下面介绍Java的多态性和其中的动态链接,向上转型:面向对象的三个特征:封装、继承和多态;封装隐藏了类的内部实现机制,可以在不影响使用者的前提下修改类的内部结构,同时保护了数据;继承是为了重用父类代码,子类继承父类就拥有了父类的成员。
方法的重写、重载与动态连接构成多态性。
Java之所以引入多态的概念,原因之一是它在类的继承问题上和C++不同,后者允许多继承,这确实给其带来的非常强大的功能,但是复杂的继承关系也给C++开发者带来了更大的麻烦,为了规避风险,Java只允许单继承,派生类与基类间有IS-A的关系(即“猫”isa“动物”)。
这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足,此外,抽象类和接口也是解决单继承规定限制的重要手段。
同时,多态也是面向对象编程的精髓所在。
理解多态,首先要知道“向上转型”。
我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类。
我可以通过 Catc=newCat(); 实例化一个Cat的对象,这个不难理解。
但当我这样定义时: Animala=newCat(); 这代表什么意思呢? 很简单,它表示我定义了一个Animal类型的引用,指向新建的Cat类型的对象。
由于Cat是继承自它的父类Animal,所以Animal类型的引用是可以指向Cat类型的对象的。
这就是“向上转型”。
java中什么是多态性?它具有什么优点
Java是面向对象的语言,多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,主要体现在继承和接口实现两方面,详见例子:
继承实现多态例如:
class A{
method(){
System.out.println("a");}
}
class B extends A{
method(){
System.out.println("b");}}
class test{
main(){
A test = new B();
test.method();//执行以后输出的是:b。解释就是:父类引用(A)指向子类对象(B),这个引用调用的是子类的方法,而不是父类A的方法;
}}
继承实现多态其实原理类似:
interface A{
method();}
class B implements A{
method(){
System.out.println();}}
class test{
main(){
A test = new B();
test.method();//此处便会使用java的多态,B实现了A,虽然=前面是A test,但实际上生成的确是B的对象,所以调用它的方法,同继承中的父类对象指向子类对象原理相同,只是此处为继承;
}}
多态的好处非常明显啊,有人总结:
1.可替换性。多态对已存在的代码具有可替换性。
2.可扩充性。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。
3.接口性。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。
4.灵活性。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性。多态简化了对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。值得注意的是,多态并不能够解决提高执行速度的问题,因为它基于动态装载和地址引用,或称动态绑定。
运行时实现Java的多态性
运行时多态性是面向对象程序设计代码重用的一个最强大机制,动态性的概念也可以被说成“一个接口,多个方法”。Java实现运行时多态性的基础是动态方法调度,它是一种在运行时而不是在编译期调用重载方法的机制,下面就继承和接口实现两方面谈谈java运行时多态性的实现。
一、通过继承中超类对象引用变量引用子类对象来实现
举例说明:
//定义超类superA
class
superA
{
int
i
=
100;
void
fun()
{
System.out.println(“This
is
superA”);
}
}
//定义superA的子类subB
class
subB
extends
superA
{
int
m
=
1;
void
fun()
{
System.out.println(“This
is
subB”);
}
}
//定义superA的子类subC
class
subC
extends
superA
{
int
n
=
1;
void
fun()
{
System.out.println(“This
is
subC”);
}
}
class
Test
{
public
static
void
main(String[]
args)
{
superA
a;
subB
b
=
new
subB();
subC
c
=
new
subC();
a=b;
a.fun();
(1)
a=c;
a.fun();
(2)
}
}
运行结果为:
This
is
subB
This
is
subC
上述代码中subB和subC是超类superA的子类,我们在类Test中声明了3个引用变量a,
b,
c,通过将子类对象引用赋值给超类对象引用变量来实现动态方法调用。也许有人会问:“为什么(1)和(2)不输出:This
is
superA”。java
的这种机制遵循一个原则:当超类对象引用变量引用子类对象时,被引用对象的类型而不是引用变量的类型决定了调用谁的成员方法,但是这个被调用的方法必须是在超类中定义过的,也就是说被子类覆盖的方法。
所以,不要被上例中(1)和(2)所迷惑,虽然写成a.fun(),但是由于(1)中的a被b赋值,指向了子类subB的一个实例,因而(1)所调用的fun()实际上是子类subB的成员方法fun(),它覆盖了超类superA的成员方法fun();同样(2)调用的是子类subC的成员方法fun()。
另外,如果子类继承的超类是一个抽象类,虽然抽象类不能通过new操作符实例化,但是可以创建抽象类的对象引用指向子类对象,以实现运行时多态性。具体的实现方法同上例。
不过,抽象类的子类必须覆盖实现超类中的所有的抽象方法,否则子类必须被abstract修饰符修饰,当然也就不能被实例化了。
java多态性基础的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java多态性是什么、java多态性基础的信息别忘了在本站进行查找喔。
发布于:2022-12-19,除非注明,否则均为
原创文章,转载请注明出处。