您当前的位置:首页 > 互联网教程

java多态的实现主要体现在哪些方面

发布时间:2025-05-22 18:22:41    发布人:远客网络

java多态的实现主要体现在哪些方面

一、java多态的实现主要体现在哪些方面

1.编译多态:主要是体现在重载,系统在编译时就能确定调用重载函数的哪个版本。

2.运行多态:主要体现在OO设计的继承性上,子类的对象也是父类的对象,即上溯造型,所以子类对象可以作为父类对象使用,父类的对象变量可以指向子类对象。因此通过一个父类发出的方法调用可能执行的是方法在父类中的实现,也可能是某个子类中的实现,它是由运行时刻具体的对象类型决定的。

二、java中多态的特点

面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。

多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)

实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。

多态的作用:消除类型之间的耦合关系。

现实中,关于多态的例子不胜枚举。比方说按下 F1键这个动作,如果当前在 Flash界面下弹出的就是 AS 3的帮助文档;如果当前在 Word下弹出的就是 Word帮助;在 Windows下弹出的就是 Windows帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

下面是多态存在的三个必要条件,要求大家做梦时都能背出来!

1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。

2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。

3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。

4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。

5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

三、java中的多态三要素是什么

1。Person person= new A();不是父类对象指向子类引用而是父类引用指向子类对象

2。这个对象不能调用子类A特有的弹吉他方法--person.guitar(); X

3.如果仅是这么写程序,还不是多态,记住实现多态的三要素:继承重写父类引用指向子类对象

那么,你必须在父类里面定义一个方法guitar();,然后在子类中重写这个方法

之后,如果你调用persion.guitar(),此时在代码的编译阶段,persion调用的仍然是自己的guitar(),不是儿子的。而当程序运行时,就是java XXX, persion调用的却是儿子的guitar()。这个动态的过程才是多态。

比如A a= new B();是创建了一个子类对象并把它当成父类对象A用

此时,引用变量a有2个类型,编译时的类型为A,运行时的类型为B.在代码编译过程中,a只能调用属于A的方法.不能调用B类里面的方法.注意,由于继承关系,如果B重写了A的某个方法,比如说eat(),而在代码编译过程中,a.eat()调用的是A的eat(),但在程序运行时,却运行的是B的eat().这就是多态

比如Animal a= new Tiger(); Tiger继承并重写了Animal的eat()方法.这也是父类引用指向子类对象.首先, a是一只老虎.但不幸的是,Animal a= new Tiger();也就是说a虽然有了老虎的实质,就是说有了老虎的爪子,身材.....,但却没有老虎的名分.它虽然身体是老虎,但名字或者说它的类别却是动物,而不是老虎.而作为动物的定义,你当然不能使用属于老虎的定义的方法.比如说,虽然二者都有吃的行为,但老虎吃肉,动物都吃肉么?所以虽然a实质上是老虎,但在书面描述a的行为时,你只能使用动物的定义.这个阶段就相当于代码的编译的阶段.而此时a的类型为编译时的类型-动物.而如果具体实施吃的行为时,比如说给a喂吃的,虽然书面定义了a只能有动物的笼统的吃的方法,比如说用嘴,没有规定要吃肉.但是现在是具体操作了,由于a实质上是老虎,所以a实质上履行的还是老虎的吃的方法.具体的吃的过程,就相当于程序的运行的阶段.而此时a的类型为运行时的类型-老虎