什么是多态性?Java中的多态包含哪些类型

2020-11-24 15:33:42 字数 5589 阅读 8242

1楼:猴饶舱

多态性:顾名思义就是拥有“多种形态”的含义,是指属性或方法在子类中表现为多种形态。它包括两种类型:

静态多态性:包括变量的隐藏、方法的重载(指同一个类中,方法名相同[方便记忆],但是方法的参数类型、个数、次序不同,本质上是多个不同的方法);

动态多态性:是指子类在继承父类(或实现接口)时重写了父类(或接口)的方法,程序中用父类(或接口)引用去指向子类的具体实例,从**形式上看是父类(或接口)引用去调用父类(接口)的方法,但是在实际运行时,jvm能够根据父类(或接口)引用所指的具体子类,去调用对应子类的方法,从而表现为不同子类对象有多种不同的形态。不过,程序**在编译时还不能确定调用的哪一个类的方法,只有在运行时才能确定,故又称为运行时的多态性。

java中多态具体是什么???

2楼:drank倾城

首先表明观点,重载

不是java多态的一种体现。

java的多态是指在程序运行过程中由虚拟机确定到底该使用哪种形态完成指定行为的一个过程。如下:

parent p = new son();

p.speak();

如果在son中对父类speak()方法进行了重写,那么当你**写到这里时,编译器是不知道要执行parent中的speak()还是son中的speak()方法的,编译器只知道这样写不会发生语法错误;只有在运行过程中才会根据实际在内存中(堆)创建的对象去执行相应的方法

如果重载是多态,那我问你,当你在**中写上某个重载的方法后,此时编译器不是已经确定了到底是哪个方法在完成你的功能吗?这仅仅是编译期,程序还没有运行呢。

我还看到一些关于多态的其他说法,比如:编译时多态,运行时多态。而这种观点普遍认为重载就是多态体现的一种,因为重载算是编译时多态,而运行时多态中就是我上面写的那个例子。

借用一句《java编程思想》作者bruce eckel的话:"不要犯傻,如果它不是晚绑定,它就不是多态"。这里的晚绑定就是指动态绑定,早绑定就是指静态绑定,也就是所谓的重载。

具体如何理解,网上关于这方面的讨论一大堆,各位自行参考。

3楼:嗡嗡大佬

多态具体表现在重写和重载,多态就是类的多种表现方式,比如同名不同参。

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、**共享的优势,很好的解决了应用程序函数同名问题。

首先说重载(overload),是发生在同一类中。与什么父类子类、继承毫无关系。标识一个函数除了函数名外,还有函数的参数(个数和类型)。

也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。

再说重写(override),是发生在子类中!也就是说必须有继承的情况下才有重写发生

4楼:逮夏赵静

我只说我的理解和java编程经验。

给你举个例子,方法的多态。

比如你声明2个方法。

public

void

method(string

str1)

public

void

method()

注意,2个方法名相同,但参数不同!!

你调用方法的时候直接调用,jdk会根据你的参数来决定走第一个方法还是第二个方法。

这就是多态。

5楼:况广英洋绸

……多态,只要你了解重载的概念就很简单。。()就假如你又一个函数add(整型参数1,整型参数2);

但是你有一个对象想实现同样的功能,它不会再去构造一个函数,而是利用重载性质

add(对象类型1,对象类型2)。直接添加声明就可以了这样add函数就实现了多态性,当然不单单函数有多态性

6楼:糖糖寳寳

多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享、**共享的优势,很好的解决了应用程序函数同名问题。

多态有两种表现形式:重载和覆盖

1、首先说重载(overload),是发生在同一类中,与什么父类子类、继承毫无关系。

标识一个函数除了函数名外,还有函数的参数(个数和类型),也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。

他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!

2、再说覆盖(override),是发生在子类中,也就是说必须有继承的情况下才有覆盖发生。

继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。

这样再调用这个方法的时候,就是执行子类中的过程了,父类中的函数就被覆盖了。

7楼:匿名用户

将参数定义为一个父类,各子类中都重写了父类的方法,在方法中用传入的父类对象调用这个方法。当传入什么子类时就会调用相应的各子类的方法。这就是多态。

具体的例子**书上有很多就不列出来了

java中多态是什么意思?

8楼:五年后的之后

多态(polymorphi**)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用charlie calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,

父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“delphi4编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。

多态性在object pascal和c++中都是通过虚函数实现的。

多态指同一个实体同时具有多种形式。它是面向对象程序设计(oop)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。

c++中的多态性具体体现在运行和编译两个方面。

运行时多态是动态多态,其具体引用的对象在运行时才能确定。编译时多态是静态多态,在编译时就可以确定对象使用的形式。

多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。

c++中,实现多态有以下方法:虚函数,抽象类,覆盖,模板(重载和多态无关)。

oc中的多态:不同对象对同一消息的不同响应.子类可以重写父类的方法

多态就是允许方法重名 参数或返回值可以是父类型传入或返回。

9楼:匿名用户

什么是多态

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

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

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

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

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

--------------------------

再简单一点:坐公车时,一个男的靠在你的肩膀,你可能不爽,但是如果一个美女靠在你的肩膀你就很乐意,这就是多态的表现

10楼:乐乐

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、**共享的优势,很好的解决了应用程序函数同名问题。

多态有两种表现形式:重载和覆盖

首先说重载(overload),是发生在同一类中。与什么父类子类、继承毫无关系。

标识一个函数除了函数名外,还有函数的参数(个数和类型)。也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。

他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!

再说覆盖(override),是发生在子类中!也就是说必须有继承的情况下才有覆盖发生。

我们知道继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。

这样再调用这个方法的时候,就是执行子类中的过程了。父类中的函数就被覆盖了。(当然,覆盖的时候函数名和参数要和父类中完全一样,不然你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫不关系)

11楼:北京巴卜技术****

多态具体表现在重写和重载多态就是类的多种表现方式比如同名不同参子类重写父类

12楼:匿名用户

多态也是java的一个很重要的部分,就是一个方法名可以用多次,具体根据参数的不同来分辨你调用哪个方法,通俗的解释多台就是,假如有个方法名叫:“动物的叫声”

那么,当你传递的参数是动物狗,则调用狗叫声,是猫,则调用猫叫声,这就是多态。

13楼:匿名用户

多态分方法的多态和对象的多态,方法多态是对一个方法有多种参数、返回值的表达;对象多态例:student s = new person();

14楼:匿名用户

例子讲得比较详细,可以看看。

http://devx.javaeye.***/blog/60005

15楼:马小小超

和c++中的概念类似

16楼:匿名用户

多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加限制,允许对不同类型的值执行相同的**;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的**。

通用的多态又分为参数多态(parametric)和包含多态(inclusion);特定的多态分为过载多态(overloading)和强制多态(coercion)。

java中多态的定义是什么?

17楼:糖糖寳寳

多态性是指允许不同类的对象对同一消息作出响应,多态性包括参数化多态性和包含多态性,多态性语言具有灵活、抽象、行为共享、**共享的优势,很好的解决了应用程序函数同名问题。

多态有两种表现形式:重载和覆盖

1、首先说重载(overload),是发生在同一类中,与什么父类子类、继承毫无关系。

标识一个函数除了函数名外,还有函数的参数(个数和类型),也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。

他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!

2、再说覆盖(override),是发生在子类中,也就是说必须有继承的情况下才有覆盖发生。

继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。

这样再调用这个方法的时候,就是执行子类中的过程了,父类中的函数就被覆盖了。