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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 柳小龙 中级黑马   /  2013-8-14 22:11  /  1677 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

3 个回复

倒序浏览
Overload是重载. Override是重写,他们都是java多态性的不同表现.当一个类中定义了多个同名的方法,但是他们的擦拿书个数或参数类型不同,就称为重载;在继承的关系中,子类的方法名.参数名都与父类相同,当调用该方法时,指向子类方法,这就是重写.Overloaded的返回值是不影响的,所以可以改变返回值的类型
回复 使用道具 举报
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
1.重载的概念:
----->在同一个类中,允许存在同名函数,但它们的参数个数或者参数类型不同即可。
public static void main(String[] args){
System.out.println(add(1,2));
System.out.println(add(1.11,2.22));
}
//返回一个int类型相加的和
public static int add(int a, int b){
return a + b;
}
//返回一个double类型想加的和
public static double add(double a, double b){
return a + b;
}

重载,在一个类定义中,可以编写几个同名的方法,但是只要它们的签名参数列表不同,Java就会将它们看做唯一的方法。简单的说,一个类中的方法与另一个方法同名,但是参数表不同,这种方法称之为重载方法。

重写就是子类重写了父类的方法。
比如:
class Fu{
   int num = 3;
}
class Zi extends Fu{
   int num = 5;
}
这时候Zi类继承了Fu类,也拥有了num,这时候输出num,JVM(虚拟机)会先去Fu类中查找,输出Fu类中的num,但是Zi类有num,所有在运行Zi类的时候重写了num的值,输出5
回复 使用道具 举报
都是多态的一种表现形式:
重载Overload是类内部的、覆盖Override(又称重写)是子父类之间的。
重载的规则是:同名不同参数,参数不同(类型或数量)
覆盖的规则是:访问的范围不能更小,抛出的异常不能更多,方法名、参数必须完全相同
Overload目的是让JVM认为他们是两个不同的方法,当然可以返回不同类型的值。
重载的解析
当类的设计者提供了重载方法之后,类的使用者在使用这些方法时编译器需要确定调用哪一个方法,确定的唯一依据是参数列表,确定的过程被称为重载的解析。
编译器解析的步骤按照下面的顺序进行
1 根据调用的方法名,查找是否有定义好的同名方法,如果没有就会报错
2 比较形参和实参的数目是否相等,如果没有则会报错。如果有一个或多个方法符合条件,这些方法进入候选集
3 与候选集中的方法比较参数表,如果对应位置上的每个参数类型完全匹配,或者可以通过扩展转换相匹配,则该方法称为可行方法,并入可行集。若不存在可行方法,则会报错
4 在可行集中按照下面的原则选取最佳可行方法,若最佳可行方法为0 则会报错,否则最佳可行方法就是最终确定要调用的方法
所以先检查是否有重名,有重名就看参数,所以如果有两个方法名相同,并且参数相同的方法,即使一个是静态一个是非静态的也不行。编译不通过。
而Override则相反,是故意让JVM认为子父类中的两个方法一样,那么他就会优先调用子类的方法,
访问范围不能更小时因为在能访问到父类的范围内都能访问到子类,即为了满足(父类的引一直能指向子类对象)
抛出的异常不能更多的意思是,子类是父类的扩展,细化,是更具体的父类,那么子类出现的异常都只能是父类可能出现的某种异常,不可能出现List的子类ArrayList出现IO异常。

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