A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵红萍 中级黑马   /  2012-10-25 19:49  /  2095 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Overload和Override是多态性的表现?这怎么理解....

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

4 个回复

倒序浏览
Override   子类的方法覆盖饿了父类的方法,当调用子类时,执行的是子类中重写后的方法。
Overload  多种实现,根据参数列表的不同。传参不同,调到不用的方法。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现。   
1、重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态性的一种表现。
2、如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding) 。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。这也是面向对象编程的多态性的一种表现。 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型或有不同的参数次序,则称为方法的重载(Overloading)。不能通过访问权限、返回类型、抛出的异常进行重载。

其实现的机制:

overload是重载,重载是一种参数多态机制,即代码通过参数的类型或个数不同而实现的多态机制。是一种静态的绑定机制。(在编译时已经知道具体执行的是那个代码段)
override是覆盖。覆盖是一种动态绑定的多态机制。即在父类和子类中同名元素(如成员函数)有不同的是想代码。执行的是哪个代码是根据运行是的实际情况而定的。

点评

可以看出来对重载和覆盖理解的很全面,我在补充一点新手容易犯的毛病就是,重写和重载都依赖于继承,如果没有继承就没有多态  发表于 2012-10-25 22:12

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 新立 于 2012-10-25 20:23 编辑

覆盖,父类中有,子类中也有
重载,同一个方法名,不同的表现形态(内容)
给个小例子说明情况:
  1. public class Test1 {

  2.         public static void main(String[] args){
  3.                 Animal a = new Cat();//向上转型
  4.                 a.eat();
  5.                 Cat c = (Cat)a;//向下转型
  6. //同一个方法名称,返回数据确不相同,理解吧
  7.                 System.out.println(c.sum(1,1));
  8.                 System.out.println(c.sum(1.0,1.0));
  9.                
  10.         }
  11. }

  12. class Animal{
  13.         public void eat(){
  14.                 System.out.println("Animal eat");
  15.         }
  16. }

  17. class Cat extends Animal{
  18.         public void eat(){
  19.                 System.out.println("Cat eat");
  20.         }
  21.         
  22.         public int sum(int a,int b){
  23.                 return a+b;
  24.         }
  25.         public double sum(double a,double b){
  26.                 return a+b;
  27.         }
  28.         
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
重载Overload:表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
覆盖Override:表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马