问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java中多态是什么意思?

发布网友 发布时间:2022-05-01 04:41

我来回答

12个回答

懂视网 时间:2022-05-16 02:40

  多态(Polymorphism)按字面的意思就是“多种状态”,同样的行为(方法)在不同对象上有不同的状态。
  在OOP中很多地方都要用到多态的特性,比如同样是点击鼠标右键,点击快捷方式、点击桌面空白处、点击任务栏等弹出的菜单都是不同的。

方法重写(override):

  即子类定义一个与父类名字相同的方法,以此覆盖父类方法,以此来实现不同的功能。

 1 function Animal(){} 2 var AnimalP = Animal.prototype; 3 AnimalP.eat = function(food){ 4  console.log('这个动物正在吃' + food); 5 }; 6 7 function Snake(){} 8 var SnakeP = extend(Snake,Animal);//extend函数请看上一节 9 /*snake没有对eat方法重写,继承的父类eat()方法*/10 function Dog(){}11 var DogP = extend(Dog,Animal);12 DogP.eat = function(food){13  /*对eat()方法重写*/14  /*上一章讲过,也可以在这里通过 Animal.eat.call(this,food)调用父方法;*/15  console.log("这只狗正在吃"+food);16 };17 18 function Cat(){}19 var CatP = extend(Cat,Animal);20 CatP.eat = function(food){21  console.log("这只猫正在吃"+food);22 };23 var snake = new Snake();24 snake.eat('老鼠');//log:这个动物正在吃老鼠25 var dog = new Dog();26 dog.eat('骨头');//log:这只狗正在吃骨头27 var cat = new Cat();28 cat.eat('鱼');//log:这只猫正在吃鱼

抽象类(abstract class):

  上面的代码中,Snake类没有实现自己的eat()方法,但有的时候我们希望子类一定要有某个方法(抽象方法),这样可以规范子类的行为,这时候就要用到抽象类,
  ES5、ES6都没有抽象类的概念的,所以我们只能通过模拟来实现,让我们接着上面的代码,假如我们要把Animal的eat()方法定义为抽象方法:

1 AnimalP.eat = function(food){2  /*定义抽象方法(虚函数),如果子类没有重写这个方法,在执行这方法的时候就会抛出错误*/3  throw '"' + this.constructor.name + "'类没有eat()方法";4 };5 function Snake(){}6 var SnakeP = extend(Snake,Animal);7 var snake = new Snake();8 snake.eat('老鼠');//throw:"Snake'类没有eat()方法

方法重载(overload):

  我们一定写过这样的函数,根据传入的参数不一样(类型、参数个数),方法的运行结果也不一样:

1 var run = function(speed){2  if(typeof speed == 'number'){3  console.log('跑的速度有' + speed + 'm/s');4  }else if(typeof speed == 'string'){5  console.log('跑的速度有' + speed);6  }7 }8 run(15);//log:跑的速度有15m/s9 run('20KM/h');//log:跑的速度有20KM/h

   但上面这样写明显代码难维护,可以把run方法作为一个接口,根据参数的类型执行不同方法,用在类中就向下面一样:

 1 function Dog(){} 2 var DogP = Dog.prototype; 3 DogP.run = function(speed){ 4  if(typeof speed == 'number'){ 5  this._runNumber(speed); 6  }else if(typeof speed == 'string'){ 7  this._runString(speed); 8  }else{ 9  throw '参数不匹配';10  }11 }12 DogP._runString = function(speed){13  console.log('这只狗跑的速度有' + speed);14 }15 DogP._runNumber = function(speed){16  console.log('这只狗跑的速度有' + speed + 'm/s');17 }18 var dog = new Dog();19 dog.run(15);//log:这只狗跑的速度有15m/s20 dog.run('20KM/h');//log:这只狗跑的速度有20KM/h21 dog.run([]);//throw:参数不匹配

  这就是方法重载的模拟,但实际上,ES5、ES6、typescipt都不支持语法上的方法重载,typescipt也只是支持函数重载。
  这是多态的另一种实现方式。

Demo by ES6:

 1 class Animal{ 2  eat(food){ 3  throw '"' + this.constructor.name + "'类没有eat()方法"; 4  } 5 } 6 class Snake extends Animal{} 7 class Dog extends Animal{ 8  eat(food){ 9  console.log("这只狗正在吃"+food);10  }11 }12 class Cat extends Animal{13  eat(food){14  console.log("这只猫正在吃"+food);15  }16 }17 let snake = new Snake();18 snake.eat('老鼠');//throw:"Snake'类没有eat()方法19 let dog = new Dog();20 dog.eat('骨头');//log:这只狗正在吃骨头21 let cat = new Cat();22 cat.eat('鱼');//log:这只猫正在吃鱼

Demo by TypeScript:

 1 abstract class Animal{//定义抽象类Animal 2 constructor(){} 3 abstract eat(food: string){} 4 /*定义抽象方法eat(),并且限定传入的参数类型是string, 5 还可以定义返回值,接口等,如果子类不符合限定的规范,编译的时候就会报错。 6 */ 7 } 8 class Snake extends Animal{}//报错,无法通过编译,因为没有定义eat()抽象方法 9 class Dog extends Animal{10 eat(food: string){11  console.log("这只狗正在吃"+food);12 }13 }14 class Cat extends Animal{15 eat(food: string){16  console.log("这只猫正在吃"+food);17 }18 }19 let dog = new Dog();20 dog.eat('骨头');//log:这只狗正在吃骨头21 let cat = new Cat();22 cat.eat('鱼');//log:这只猫正在吃鱼

后话

  如果你喜欢作者的文章,记得收藏,你的点赞是对作者最大的鼓励;

  面向对象的主要知识点在这里就讲完了,这些东西仅仅是基础,我讲的肯定不够完善,仅仅是为了让大家快速入门,建议大家有时间的话还是系统的看书学习一下js OOP;

  本系列还有最后一章,会把前几张讲的知识点通过一个案例整合在一起,让大家可以更好的消化吸收,大概会酝酿两周的时间;

  大家有什么疑问可以留言或私信作者,作者尽量第一时间回复大家;

  如果老司机们觉得那里可以有不恰当的,或可以表达的更好的,欢迎指出来,我会尽快修正、完善。

热心网友 时间:2022-05-15 23:48

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

父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi4 编程技术内幕”)。简单的说,就是一句话:允许将子类类型的指针赋值给父类类型的指针。多态性在Object Pascal和C++中都是通过虚函数实现的。

多态指同一个实体同时具有多种形式。它是面向对象程序设计(OOP)的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。C++中的多态性具体体现在运行和编译两个方面。

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

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

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

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

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


扩展资料:

把不同的子类对象都当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

赋值之后,父类型的引用就可以根据当前赋值给它的子对象的特性以不同的方式运作。也就是说,父亲的行为像儿子,而不是儿子的行为像父亲。

比如从某个基类派生出多个子类,其基类有一个虚方法Tdoit,然后其子类也有这个方法,但行为不同,然后这些子类对象中的任何一个可以赋给其基类对象的引用,或者说将子对象地址赋给基类指针,这样其基类的对象就可以执行不同的操作了。

实际上你是在通过其基类的引用来访问其子类对象的,你要做的就是一个赋值操作。

使用继承性的结果就是当创建了一个类的家族,在认识这个类的家族时,就是把子类的对象当作基类的对象,这种认识又叫作upcasting(向上转型)。这样认识的重要性在于:我们可以只针对基类写出一段程序,但它可以适应于这个类的家族,

因为编译器会自动找出合适的对象来执行操作。这种现象又称为多态性。而实现多态性的手段又叫称动态绑定(dynamic binding)。

参考资料:百度百科-多态

热心网友 时间:2022-05-16 01:06

什么是多态
概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。(可以理解为对象的多种特性)
多态存在的三个必要条件
1.要有继承关系的存在(实现接口也是一种继承关系)
2.要有方法的重写
3.要有父类引用指向子类对象

热心网友 时间:2022-05-16 02:40

Java的多态是java要实现的多种形式
实现多态的三个条件(前提条件,向上转型、向下转型)
1、继承的存在;(继承是多态的基础,没有继承就没有多态)
2、子类重写父类的方法。(多态下会调用子类重写后的方法)
3、父类引用变量指向子类对象。(涉及子类到父类的类型转换)
向上转型 Student person = new Student()
将一个父类的引用指向一个子类对象,成为向上转型,自动进行类型转换。此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法,而不是父类的方法此时通过父类引用变量无法调用子类特有的方法。
向下转型 Student stu = (Student)person;
将一个指向子类对象的引用赋给一个子类的引用,成为向下转型,此时必须进行强制类型转换。向下转型必须转换为父类引用指向的真实子类类型,,否则将出现ClassCastException,不是任意的强制转换
向下转型时可以结合使用instanceof运算符进行强制类型转换,比如出现转换异常---ClassCastException
关于java的基础知识学习,一定要多看视频 多看视频 多看视频 重要的事情说三遍,因为视频不会使学习变得枯燥,推荐b站上高淇讲得还不错,可以看看视频了解一下什么是java中的多态。

热心网友 时间:2022-05-16 04:32

什么是多态

面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。
多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)
实现多态的技术称为:动态绑定(dynamic binding),是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法。
多态的作用:消除类型之间的耦合关系。
现实中,关于多态的例子不胜枚举。比方说按下 F1 键这个动作,如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;如果当前在 Word 下弹出的就是 Word 帮助;在 Windows 下弹出的就是 Windows 帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。
--------------------------
再简单一点:坐公车时,一个男的靠在你的肩膀,你可能不爽,但是如果一个美女靠在你的肩膀你就很乐意,这就是多态的表现

热心网友 时间:2022-05-16 06:40

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

热心网友 时间:2022-05-16 09:04

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

热心网友 时间:2022-05-16 11:46

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

热心网友 时间:2022-05-16 14:44

例子讲得比较详细,可以看看。
http://devx.javaeye.com/blog/60005

热心网友 时间:2022-05-16 17:58

和c++中的概念类似

热心网友 时间:2022-05-16 21:30

多态分为两种:通用的多态和特定的多态。两者的区别是前者对工作的类型不加*,允许对不同类型的值执行相同的代码;后者只对有限数量的类型有效,而且对不同类型的值可能要执行不同的代码。
通用的多态又分为参数多态(parametric)和包含多态(inclusion);特定的多态分为过载多态(overloading)和强制多态(coercion)。

热心网友 时间:2022-05-17 01:18

多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
多态有两种表现形式:重载和覆盖
首先说重载(overload),是发生在同一类中。与什么父类子类、继承毫无关系。
标识一个函数除了函数名外,还有函数的参数(个数和类型)。也就是说,一个类中可以有两个或更多的函数,叫同一个名字而他们的参数不同。
他们之间毫无关系,是不同的函数,只是可能他们的功能类似,所以才命名一样,增加可读性,仅此而已!

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

我们知道继承一个类,也就有了父类了全部方法,如果你感到哪个方法不爽,功能要变,那就把那个函数在子类中重新实现一遍。
这样再调用这个方法的时候,就是执行子类中的过程了。父类中的函数就被覆盖了。(当然,覆盖的时候函数名和参数要和父类中完全一样,不然你的方法对父类中的方法就不起任何作用,因为两者是两个函数,毫不关系)
java中多态性什么意思?

java中多态性的意思是作为面向对象的程序设计语言最核心的特征,表示一个对象有着多重特征,可以在特定的情况下表现出不同的状态,从而对应着不同的属性和方法。1、就java而言,多态性就是允许将父对象设置成为一个或更多与自身子对象相等的技术,赋值之后父对象就可以根据当前赋值给自身子对象的特性以不...

java的多态是什么意思

Java的多态是指同一个方法调用会根据调用对象的不同而产生不同的行为。具体地说,它包括两种形式:重写和重载。重写指的是在子类中重写父类中的方法,对于同样的方法调用,子类将覆盖父类的实现;而重载指的是在同一个类中定义多个同名但参数不同的方法,可以根据不同的参数列表来调用不同的方法。多...

在java中什么是多态。。 什么时候用多态

在java中: 多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例): public interface Parent { public void simpleCall(); } public class Child_A impl...

java中多态性什么意思?

在JAVA中有两种多态是指:运行时多态和编译时多态。多态性是面向对象的核心特征之一,类的多态性提供类中成员设计的灵活性和方法执行的多样性。多态指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)实现多态的技术称为:动态绑...

java中的多态怎么理解

在java中,多态是面向对象编程的一种重要特性,它允许不同的对象对同一个消息做出不同的响应。简单来说,多态就是同一种行为在不同对象上的表现方式不同。Java中的多态实现主要依靠两个机制:继承和接口。在继承中,子类可以继承父类的属性和方法,也可以重写父类的方法来实现自己的特定行为。当父类的...

java中多态是什么意思?

多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用Charlie Calverts对多态的描述——多态性是允许你将父对象设置成为一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作(摘自“Delphi...

java中多态是什么意思?

什么是多态 1.面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是我们最后一个概念,也是最重要的知识点。2.多态的定义:指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式。(发送消息就是函数调用)3....

在JAVA中有两种多态指的是什么

在JAVA中有两种多态是指:运行时多态和编译时多态。关于类的多态性简介如下:多态(polymorphism)意为一个名字可具有多种语义.在程序设计语言中,多态性是指”一种定义,多种实现”.例如,运算符+有多种含义,究竟执行哪种运算取决于参加运算的操作数类型:1+2 //加法运算符 “1” + “2” //字符串...

JAVA多态怎么解释?

在Java中多态就是在讨论方法调用的绑定,绑定就是将一个方法调用同一个方法主体关联起来。在C语言中,方法(在C中称为函数)的绑定是由编译器来实现的,在英文中称为early binding(前期绑定),因此,大家自然就会想到相对应的late binding(后期绑定),这在Java中通常叫做run-time binding(运行时绑定),...

java中在什么时候用到多态

在java中: 多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,可以在特定的情况下,表现不同的状态,从而对应着不同的属性和方法。从程序设计的角度而言,多态可以这样来实现(以java语言为例):public interface Parent { public void simpleCall();} public class ...

java多态什么意思 java中什么叫多态 java中的多态是怎么实现的 java为什么要用多态 java中的多态怎么理解 java中的多态的含义 java中多态的实现 java中多态的理解 java中编写多态类
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
吸烟吸的牙齿发黄...有的救吗?? 我的电脑重做系统了,里面的office2007怎么能恢复使用?我没有安装包_百... 宿舍墙上的H3C是什么意思? 电子制造业精密清洗机分类 华硕笔记本黑屏怎么办呢?求救!!! 360浏览器怎么设置主页? 牛肉馆名字大全带财运的370个 关于09年5月婵真银杏泡沫洗面奶的真假 为什么瑾泉的洗面奶在网上的价格是市场价格的一半? tfs 洗面奶 满意追加30分! 三星手机s-5830屏幕解锁忘记密码怎么办 三星s六手机忘记密码怎么办 请问三星s5360锁屏密码忘了,怎么解锁,刷机行吗 三星GT-S5150手机信息锁住了密码忘了怎么解锁? 三星GT-s6358手机解锁密码忘了怎么办 三星GT-S7562C手机忘记密码怎么解锁 三星手机sch-s579手机密码忘记了怎么解锁,谢谢 三星手机型号GT-S5368密码忘了怎么解锁 三星S5360手机屏幕密码忘了,怎么解锁? 三星S7572密码忘记了 怎么办 mysql下字段值的大小写被忽略怎么解决 近期最火爆的爽片,全程无尿点,都有哪些电影呢? 疾速追杀1中为什么电影一开始主人公就哭了? 极速系列怎么观看 电影《疾速追杀》在什么地方可以看吖??? 疾速追杀男主人公开的两部车子是什么 哪一部电影是因为自己的狗狗被杀,然后大开杀戒的 极速特工极速备战极速追杀观看顺序 疾速追杀1为什么不杀维戈 淘宝生意参谋怎么看哪个工具最实用?哪个用得最频繁 C#中,多态性的体现就是父类new子类对象吗?还有其他体现形式吗? java中假设B继承A,C继承B 下面A a=new C();与C a=new C()有区别吗?多态到底是什么意思。 java的多态怎么理解啊,多态有什么用途。 齐齐哈尔有没有13位的手机号码 齐齐哈尔手机号码价格问题 138462618是哪个省份的 手机号是齐齐哈尔的联通,来到大连怎么办流量包? 你有基于主成分分析的人脸二维码识别的算法吗 怎么分析 0452240778是齐齐哈尔哪个区的电话号码? NVIDIA® Quadro® NVS3100M 是独立显卡吗? 求Android端 二维码识别算法啊啊啊啊啊~~ 齐齐哈尔客运站的电话号码 求一个关于QR二维码识别与检测程序 nvidia nvs 3100m 这显卡是不是不适合做3d建模之类的东西? 求UG10.0安装包和视频 独立显卡NVIDIA NVS 3100M,显存512,内存2G。这个显卡能玩使命召唤吗?还有极品飞车的所有版本都可以玩吗 nvidia quadro nvs 3100m怎样 UG10.0的安装包有多大了??谁会安装帮下我了 Nvidia NVS 3100M指的是显卡还是显卡芯片? UG10.0.3.5升级包怎么升级