`
kongweile
  • 浏览: 510081 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java:Overriding与Overloading

    博客分类:
  • Java
 
阅读更多

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,因为ExceptionIOException的父类,比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] OverridingOverloading
[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

 

分享到:
评论

相关推荐

    Interactive.Object.Oriented.Programming.in.Java

    This book uses Java and Eclipse to write and generate output for examples in topics such as classes, interfaces, overloading, and overriding. Interactive Object Oriented Programming in Java uniquely ...

    Java常用英语单词.pdf

    * Overloading:方法重载 * Overriding:方法重写 五、数组 * Array declaration:数组声明 * Array initialization:数组初始化 * Array length:数组长度 * Array indexing:数组索引 * Array sorting:数组排序...

    Java The Complete Reference ,11th Edition.pdf

    Method overloading and overriding Inheritance Local variable type inference Interfaces and packages Exception handling Multithreaded programming Enumerations, autoboxing, and annotations The I/O ...

    JAVA重写和重载.pdf

    JAVA重写和重载(Overriding和Overloading) JAVA中有两种不同的多态性表现形式:重写(Overriding)和重载(Overloading)。下面将对这两种形式进行详细的解释。 重载(Overloading) 重载是指在一个类中可以...

    java面试题

     方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和...

    java中重载与重写的区别.pdf

    Java 中的重载(Overloading)和重写(Overriding)是两个不同的概念,它们都是 Java 语言中实现多态性的手段。 方法重载(Overloading) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数...

    Method-Overloading-and-OverRiding.rar_OA系统_Java_

    Method Overloading and OverRiding

    最新最全Java面试题汇总

    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。 52、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收

    java面试常见问题(超详细).pdf

    Java中什么是重载【Overloading】?什么是覆盖【Overriding】?它们有什么区别? Java中什么是多态?如何实现多态? Java中什么是接口?它有什么作用? Java中什么是抽象类?它有什么作用? Java中什么是final关键字...

    Effective Java 3rd edition(Effective Java第三版英文原版)附第二版

    Item 10: Obey the general contract when overriding equals Item 11: Always override hashCode when you override equals Item 12: Always override toString Item 13: Override clone judiciously Item 14: ...

    Java SE 基础知识题库

    java中实现多态的机制是什么?...方法的重写Overriding和重载Overloading是Java多态性的不同表现。 重写(Overriding)是父类与子类之间多态性的一种表现; 重载(Overloading)是一个类中多态性的一种表现。

    Java100个面试题.doc

    6. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类重新定义了父类的方法...

    Java语言基础下载

    方法重载(method overloading) 91 方法覆盖(method overriding) 93 基于继承的多态实现 94 隐藏(hiding) 95 构造方法在继承中的使用 96 super关键字 97 包装类 97 toString( )方法 100 内容总结 101 独立实践 102 第...

    java 面试题 总结

    方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    Java面试宝典(基础篇).docx

    1.Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思? 重写和重载的区别? 答: Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。与此相对,方法覆盖是说子类...

    coreJava240问与答面试题

    240-core-java-interview-questions-and-answers,coreJava240问与答面试题. 不过是英文的哦,想下载的朋友要注意了。1) what are static blocks and static initalizers in Java ? ...................................

    java面试葵花宝典

    java面试题大全 40、构造器Constructor是否可被override? 构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading。

    超级有影响力霸气的Java面试题大全文档

     方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和...

    java 经典面试题 于网络分享

    5. Java语言中,方法的重写(Overriding)和重载(Overloading)是多态性的不同表现。下边哪些说法是对的? A. 重写是父类与子类之间多态性的一种表现。 B. 重写是一个类中多态性的一种表现。 C. 重载是一个类中...

Global site tag (gtag.js) - Google Analytics