黑马程序员技术交流社区
标题:
请问,覆盖和重载是不是属于多态的一种体现形式?
[打印本页]
作者:
曾经的迷失
时间:
2014-2-27 09:20
标题:
请问,覆盖和重载是不是属于多态的一种体现形式?
请问,覆盖和重载是不是属于多态的一种体现形式?如果两个类没有继承或实现关系,那单纯的重载是不是就不是多态的一种体现形式了?
作者:
kkopopo
时间:
2014-2-27 09:51
单个类内部的多态性体现是重载
父子类直接按多态体现为重写!
作者:
平凡成就非凡
时间:
2014-2-27 10:01
装饰设计模式也是可以加强类的功能的,当想用继承时,可以考虑用装饰设计,继承体系过于胖啊,当建立子类对象是,初始化要先初始化父类,太消耗资源啦
作者:
李白衣
时间:
2014-2-27 10:53
你这么一说,我感觉这两个还真挺像的,子类覆盖父类的方法就可以体现出多态性了。
多态的主要好处就是:一个父类引用可以搞定所有子类方法,这样就可以节省很多代码,甚至不用更改代码。
重载主要是用于解决: 形参不同的一些函数会重名的问题。
底层使用的技术是不是一样我不知道,但是用法区别还是有的。
作者:
赵永生
时间:
2014-2-27 12:15
java多态2种表现形式:
1是 本类中表现重载(overload),只要方法参数个数类型不同就行,与返回值无关,也就是返回值类型也可以改变。
2是 父子类中表现为覆盖(override),满足三个条件 继承 重写 父类对子类的引用。多态就是动态根据子类类型,调用子类相应的方法。动物的例子 可以百度一下。
作者:
Zero霖
时间:
2014-2-27 13:51
本帖最后由 Zero霖 于 2014-2-27 13:57 编辑
覆盖和重载都是多态的体现形式。
1.重载是功能多态性的体现,方法重载指的是一个类中多个方法具有相同的名字,但是这些方法的参数必须不相同,简单的说,比如我在一个类中定义一个计算int型数据的除法方法,再定义一个计算double型数据的除法方法,将这两个方法都命名为division,一个是 int division(int x,int y),另一个是double division(double x,double y)(跟返回值没关系,返回值可以相同,这里是根据需要来决定返回值的),这就导致在对象调用方法时,根据你输入的不同参数类型来调用division方法。
2.方法覆盖,也称方法重写,指的是子类中定义一个方法,且这个方法的名字、返回类型、参数个数和参数类型与从父类那继承的方法完全相同时,隐藏了从父类那继承的方法。比如:类A中有一个方法叫void f(int x,double y),而类B继承了类A,也就继承了类A中的方法,当类B重写了从类A那继承过来的void f(int x,double y)方法以得到自身需要的结果,类B创建的对象调用void f(int x,double y)方法时将使用类B重写过的,而不是类A里面的该方法。当然,也可以根据需要即使重写了方法,也可以调用原来继承过来的未重写之前的方法。P.S.有很多方法覆盖都发生在继承了abstract类的类中,因为abstract类定义了一个abstract方法,该方法没有具体实现什么,而需要子类去实现,这就导致了继承了abstract类的子类必须去实现这个abstract方法,也就是说,继承了abstract类的子类必须实现这个功能,至于怎么实现这个功能和得到的结果是什么,abstract类就不用去管了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2