在Java中,什么是Overriding?什么是Overloading?
author: ZJ 07-3-13
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.类型转换中的重载
在一些情况下,Java 的自动类型转换也适用于重载方法的自变量。例如,看下面的程序:
// Automatic type conversions apply to overloading.
class OverloadDemo {
void test() {
System.out.println("No parameters");
}
// Overload test for two integer parameters.
void test(int a, int b) {
System.out.println("a and b: " + a + " " + b);
}
// overload test for a double parameter
void test(double a) {
System.out.println("Inside test(double) a: " + a);
}
}
class Overload {
public static void main(String args[]) {
OverloadDemo ob = new OverloadDemo();
int i = 88;
ob.test();
ob.test(10, 20);
ob.test(i); // this will invoke test(double)
ob.test(123.2); // this will invoke test(double)
}
}
|
该程序产生如下输出:
No parameters
a and b: 10 20
Inside test(double) a: 88
Inside test(double) a: 123.2
在本例中,OverloadDemo 的这个版本没有定义test(int) 。因此当在Overload 内带整数参数调用test()时,找不到和它匹配的方法。但是,Java 可以自动地将整数转换为double 型,这种转换就可以解决这个问题。因此,在test(int) 找不到以后,Java 将i扩大到double 型,然后调用test(double) 。当然,如果定义了test(int) ,当然先调用test(int)而不会调用test(double) 。只有在找不到精确匹配时,Java 的自动转换才会起作用,而且总是找到参数类型最"匹配"的方法,即它的形参比实参“大”且是最“接近”的。
4.参考资料
[1]Thinking in Java 3rd
[2] Overriding和Overloading
[url]http://blog.csdn.net/andyjava2006/archive/[/url]2006/09/13/1218858.aspx
[3] 彻底学习Java语言中的覆盖和重载
[url]http://www.blog.edu.cn/user2/41584/archives/2006/1325849.shtml[/url]
[4] JAVA 方法重载
[url]http://blog.sina.com.cn/u/[/url]538402f901000685
本文出自 “子 孑” 博客,请务必保留此出处http://zhangjunhd.blog.51cto.com/113473/20373
分享到:
相关推荐
"Overloading&Overriding" 在面向对象编程中,Overloading和Overriding是两个重要的概念,它们都是多态性的体现。下面我们将对这两个概念进行详细的解释。 1. 方法重载(Overloading) 方法重载是让类以统一的...
Java 通过方法重载(overloading)和方法覆盖(overriding)来实现多态性。 2. **Java 开发工具**: - **Eclipse**:Eclipse 是一款非常流行的免费开源 IDE,支持 Java、C/C++、PHP 等多种语言的开发。它提供了丰富的...
* Overloading:方法重载 * Overriding:方法重写 五、数组 * Array declaration:数组声明 * Array initialization:数组初始化 * Array length:数组长度 * Array indexing:数组索引 * Array sorting:数组排序...
Method overloading and overriding Inheritance Local variable type inference Interfaces and packages Exception handling Multithreaded programming Enumerations, autoboxing, and annotations The I/O ...
- 方法重载(Overloading):同一类中方法名相同但参数列表不同的方法。 - 方法覆盖(Overriding):子类重写父类的方法。 - 接口的多态性。 10. **异常处理**: - try-catch-finally语句块:捕获并处理运行时...
4. **多态性**: 掌握多态的概念,包括方法重载(overloading)和方法重写(overriding),以及抽象类和接口如何实现多态性。 5. **异常处理**: Java中的异常处理机制有助于编写健壮的程序。了解try-catch-finally...
9. **方法重载与重写**:Java允许方法重载(Overloading),即在同一个类中可以有多个同名但参数列表不同的方法。方法重写(Overriding)是子类对父类方法的实现覆盖。 10. **访问控制**:Java提供了四种访问修饰符...
4. **覆盖与重载(Overriding vs Overloading)**: 覆盖(Overriding)发生在父类和子类之间,当子类重写父类的某个方法时。而重载(Overloading)发生在同一个类中,通过不同的参数列表来实现。选项A正确地描述了...
在 Java 编程语言中,方法的重载(Overloading)和重写(Overriding)是面向对象编程的重要概念。这两种技术使得方法能够在不同的上下文中表现出不同的行为,从而增强了代码的灵活性和可读性。下面将深入探讨 Java ...
JAVA重写和重载(Overriding和Overloading) JAVA中有两种不同的多态性表现形式:重写(Overriding)和重载(Overloading)。下面将对这两种形式进行详细的解释。 重载(Overloading) 重载是指在一个类中可以...
2. 方法的重写 Overriding 和重载 Overloading:Overriding 是父类与子类之间多态性的一种表现,Overloading 是一个类中多态性的一种表现。 六、面向对象编程 1. 什么是类:类定义了一种抽象数据类型,而且类不但...
在JAVA中,多态性主要体现在方法的重载(overloading)和重写(overriding)以及接口的实现上。 关于数据类型,JAVA提供了八种基本数据类型,如int、char、float等。String虽然常用于表示文本,但它并不是基本数据...
Java中的多态可以通过方法重载(overloading)和方法覆盖(overriding)来实现。 ### 常用开发工具与技术 1. **IDE介绍**:Java集成开发环境(IDE)如Eclipse、IntelliJ IDEA等,提供了代码编辑、调试、版本控制等功能。...
- 在Java中,多态主要通过方法重载(overloading)和方法覆盖(overriding)来实现。此外,接口也是实现多态的一种方式。 #### 二、访问控制修饰符详解 Java中提供了四种访问级别:`public`、`protected`、`...
6. **方法重载与覆盖**:重载(Overloading)是指在同一个类中可以有多个同名但参数列表不同的方法,而覆盖(Overriding)则是子类对父类已有的方法进行重新定义。 7. **异常处理**:Java通过try-catch-finally结构...
多态性表现为方法的重载(overloading)和覆盖(overriding),提供了执行多样性的能力。 3. **方法与属性**:方法代表对象的行为,是包含一系列操作的代码块。属性是对象的状态,是能被外部访问或操纵的数据。 4....
重载(Overloading)和重写(Overriding)是Java中关于方法的两个重要概念,前者是同一类中方法名相同但参数列表不同的方法,后者是子类对父类方法签名完全一致的覆盖。理解并熟练应用这些概念有助于写出高效、可...
- **多态的表现形式**:重载(overloading)、重写(overriding)。 - **接口**:定义行为规范,多个类可以实现同一个接口。 ### 异常处理 #### 8. 异常的概念 - **异常定义**:程序运行时发生的错误。 - **异常...