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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱峁 中级黑马   /  2012-12-10 16:20  /  2366 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

谁知道Overload和Override的区别是什么吗

9 个回复

倒序浏览
唉,又是老生常谈的问题啦。

Overload是重载的意思,Override是覆盖的意思,也就是重写。
重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。
重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
Overload是方法的重载,也可以称为参数多态。是指在一个类中可以有多个方法名相同的函数存在,只是它们的参数形态不一样。比如构造方法的多态性。
Override是子类对父类方法的覆盖。是由于继承产生的多态,子类可以对父类的方法重新进行定义。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
override(重写)
1、方法名、参数、返回值相同。
2、子类方法不能缩小父类方法的访问权限。
3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
4、存在于父类和子类之间。
5、方法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序至少有一个不相同。  
2、不能重载只有返回值不同的方法名。
3、存在于父类和子类、同类中。

百度一下,就是结果。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
对于类的方法(包括从父类中继承的方法)如果有两个方法的方法名相同,但参数不一致,那么可以说,一个方法是另一个方法的重载方法。
重载方法满足以下条件:
1.方法名相同
2.方法的参数签名(参数类型,个数,顺序)至少有一项不相同。
3.方法的返回类型可以不相同。
4.方法的修饰符可以不相同。
!解释:什么叫参数签名:是指参数的类型,个数,顺序。
-作为程序入口的main()方法也可以被重载。
public static void main(String[] args){}
public void main(String[] i, int i){}//重载
覆盖:
覆盖方法必须满足多种约束:
子类方法的名称、参数签名、返回类型与父类一致。
以下注意几点:
*java编译器首先判断子类的方法和父类的方法的参数签名。(无论重载,覆盖。方法名相同是必要的)
两者一致,java编译器认为子类的方法试图覆盖父类的方法,既然如此,子类的方法就必须和被覆盖的方的法具有相同的返回类型。(返回不同,编译错误)
  1. class Father{
  2.         void say(String name, int age){
  3.                 System.out.println("i father");
  4.         }
  5. }
  6. class Childs extends Father{
  7.        
  8.         @Override//使用Eclipse的注解帮助判断。(如果非覆盖有提示)
  9.                 void say(){//非覆盖
  10.                 System.out.println("i chlids");
  11.         }
  12.        
  13.         @Override
  14.         void say(String name, int age){//覆盖
  15.                 System.out.println("我覆盖father.say");
  16.         }
  17. }
复制代码
*子类方法不能缩小父方法的访问权限。(例如父类的访问是公共public,而子类的访问权限却是私有private。这是无效的覆盖,发生编译错误。)
原因:如果没有这个限制,将和java语言的多态机制发生冲突。
*子类方法不能拋出比父类更多的异常
子类方法拋出的异常必须和父类方法拋出的异常相同,或者子类方法拋出的异常类是父类拋出的异常类的子类。
为什么子类不允许拋出比父类方法更多的异常呢?
原因:这时因为假如没有这个限制,将会与JAVA语言的多态机制发生冲突(异常没有被捕获,将导致程序异常终止)。
*方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间,在同一个类,方法只能重载,不能被覆盖。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
吴健 中级黑马 2012-12-10 22:17:21
8#
       Overload 是重载的意思,Override 是覆盖的意思,也就是重写。重载 Overload 表示同一个类中可以有多个名称相同的方法,
但这些方法的参数列表各不相同 (即参数个数或类型不同) 。
      重写 Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,
这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,
或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。
如果父类的方法是 private 类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。
回复 使用道具 举报
overload是在同一类中编写多个同名函数(仅仅同名同姓,其他任意一点不同即可)。
override是在子类中对父类的虚方法或抽象方法进行重写。
overload和override都体现面向对象的三大特性:多态。
overload体现了编译时多态
override体现了运行时多态
回复 使用道具 举报
Overriding和重载Overloading是Java多态性的不相同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是1个类中多态性的一种表现。假如在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象用这样个方法时,将调出使用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。假如在1个类中定义了多个同名的方法,它们或有不相同的参数个数或有不相同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可改变返回值的类型。

资料或有疏漏、请多包涵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马