overriding && overloading
2012-05-16 10:50
211 查看
在Java中,什么是Overriding?什么是Overloading?
1.Overriding
Overriding翻译过来是“重写/覆盖”。 它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
重写的主要特点是:
1)方法名必须与被重写方法一致。
2)方法参数列表必须与被重写方法一致。
3)返回类型必须与被重写方法一致。
4)重写的方法不能降低原方法的"可见度"。
例如:被重写方法为protected void do(int i,double d),则重写方法可以为protected void do(int i,double d),或者public void do(int i,double d),但是不可以是private void do(int i,double d)。
5)不能抛出新的异常或者"更宽的"异常。
例如:被重写方法为public void do(int i,double d) throws IOException,则重写方法可以为public void do(int i,double d) throws IOException ,或者public void do(int i,double d) throws ddeeException(IOException的子类),但是不可以是public void do(int i,double d) throws Exception,因为Exception是IOException的父类,比IOException"更宽"。
6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
2.Overloading
Overloading,翻译成“重载”。 它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。
其特点是:
1)各重载的方法名一致。
2)各重载方法的参数列表不一样(包括参数类型,参数个数,参数顺序3项中的一项或多项)。
3)返回类型任意。(不能通过方法的返回值来区分重载方法。)
4)访问控制符任意。(不能通过方法的访问权限来区分重载方法。)
5)可以任意抛出自身的异常,而不管被重载方法。(不能通过抛出的异常来区分重载方法。)
Overloading是指“Two or more methods can have the same name if they have different numbers or types of parameters and thus different signatures. ”显然,对重载的唯一要求就是参数列表必须改变,否则就不是重载了。
3.
overloading注意两个问题:
父类中的contructor不属于成员函数,不被继承。
只要名字相同的成员变量即隐藏,例如
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
override需要注意:
1)有些函数事不能被重载的:包括
1。有final关键字修饰的函数(final关键字的定义就是指该函数不能被重载--如果修饰函数的话;另外final还可以修饰class,意指该class不可以被继承----java引入final机制的目的是出于两方面的考虑:1.安全性2.设计;
2。class member methods,也就是用static修饰的成员函数(但是子类可以隐藏父类的class method,关于隐藏和重载有区别)
2)有些函数是必须重载以后才能被使用:对于那些在父类中被声明为abstract的方法,子类必须重载再能使用。
1.Overriding
Overriding翻译过来是“重写/覆盖”。 它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。
重写的主要特点是:
1)方法名必须与被重写方法一致。
2)方法参数列表必须与被重写方法一致。
3)返回类型必须与被重写方法一致。
4)重写的方法不能降低原方法的"可见度"。
例如:被重写方法为protected void do(int i,double d),则重写方法可以为protected void do(int i,double d),或者public void do(int i,double d),但是不可以是private void do(int i,double d)。
5)不能抛出新的异常或者"更宽的"异常。
例如:被重写方法为public void do(int i,double d) throws IOException,则重写方法可以为public void do(int i,double d) throws IOException ,或者public void do(int i,double d) throws ddeeException(IOException的子类),但是不可以是public void do(int i,double d) throws Exception,因为Exception是IOException的父类,比IOException"更宽"。
6)被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。
2.Overloading
Overloading,翻译成“重载”。 它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。
其特点是:
1)各重载的方法名一致。
2)各重载方法的参数列表不一样(包括参数类型,参数个数,参数顺序3项中的一项或多项)。
3)返回类型任意。(不能通过方法的返回值来区分重载方法。)
4)访问控制符任意。(不能通过方法的访问权限来区分重载方法。)
5)可以任意抛出自身的异常,而不管被重载方法。(不能通过抛出的异常来区分重载方法。)
Overloading是指“Two or more methods can have the same name if they have different numbers or types of parameters and thus different signatures. ”显然,对重载的唯一要求就是参数列表必须改变,否则就不是重载了。
3.
overloading注意两个问题:
父类中的contructor不属于成员函数,不被继承。
只要名字相同的成员变量即隐藏,例如
class Super {
Number aNumber;
}
class Subbie extends Super {
Float aNumber;
}
override需要注意:
1)有些函数事不能被重载的:包括
1。有final关键字修饰的函数(final关键字的定义就是指该函数不能被重载--如果修饰函数的话;另外final还可以修饰class,意指该class不可以被继承----java引入final机制的目的是出于两方面的考虑:1.安全性2.设计;
2。class member methods,也就是用static修饰的成员函数(但是子类可以隐藏父类的class method,关于隐藏和重载有区别)
2)有些函数是必须重载以后才能被使用:对于那些在父类中被声明为abstract的方法,子类必须重载再能使用。
相关文章推荐
- 一个典型的关于java(Overriding && Overloading)问题
- Overriding && Overloading
- overloading & overriding
- Polymorphism & Overloading & Overriding
- 用文字描述Overloading(重载)和Overriding(重写)的区别。
- java中重载Overriding与重写Overloading的区别
- Java:Overriding与Overloading 推荐
- Java中的方法重写(Overriding)与方法重载(Overloading)
- java中重载(Overloading)、重写(Overriding)、重定义(redefinition)
- 深入理解重载和重写及与之相关的多态性 Overloading and Overriding(转)
- Overloading和Overriding的区别
- Overloading,overriding,and extending functions and events 重载,重写和扩展函数和事件
- C++类中的 重写(Overriding) 重载(Overloading) 隐藏
- Java学习笔记之重写(Overriding)与重载(Overloading)
- 重写(Overriding)与重载(Overloading)的区别
- Overriding vs Overloading in Java
- Overriding)和重载(Overloading
- 黑马程序员 【】java学习之路——重写(Overriding)、重载(Overloading)、多态的简单总结
- Java中Overriding和Overloading的区别
- 再谈Java中的覆盖(Overriding)与重载(Overloading)