1 / 12
文档名称:

方法覆盖和方法重载(已阅).doc

格式:doc   页数:12页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

方法覆盖和方法重载(已阅).doc

上传人:2104259382 2016/6/26 文件大小:0 KB

下载得到文件列表

方法覆盖和方法重载(已阅).doc

文档介绍

文档介绍:1 方法覆盖和方法重载 1. 方法重载先看一个例题: 编译下面程序,运行结果是什么? public class TestOverload { public static void main(String[] args) { Overload overload= new Overload(); ( null ); }} class Overload{ public void print(String some){ System. out .println( "String version print" ); } public void print(Object obj){ System. out .println( "Object version print" ); }} 请选择正确的答案:(b) (a) 编译错误(b) 编译正确,打印 String version print 。(c) 编译正确,打印 Object version print 。(d) 编译正确,什么也不打印解析:当 new 执行时, 将根据执行的自变量调用适当的构造函数, null 作为一个特殊的参数匹配为 String 对象。在 Java 中,同一个类中的两个或两个以上的方法可以有同一个名字,但只要他们的参数声明不同即可,这种情况被称为重载( overload ) 。方法重载是 Java 实现多态性的一种方式。㈠普通方法重载当一个重载方法被调用时候, Java 用参数的类型或参数的数量来表明实际调用的重载方法的版本。因此, 每个重载方法的参数的类型或者参数的数量必须是不同的。虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所调用的是哪个方法。当 Java 调用一个重载方法时,原参数与调用参数匹配的方法被执行。 2 下面是一个说明方法重载的简单例子,示例代码如下: public class TestOverloadDemo { public static void main(String[] args) { OverloadDemo od= new OverloadDemo(); double result; // 调用所有版本的 test 方法 (); (10); (10, 20); result=(); System. out .println( "Result of ()" +result); }} class OverloadDemo{ void test(){ System. out .println( "No parameters" ); } // 方法重载,增加一个 int 类型参数 void test( int a){ System. out .println( "a:" +a); } // 方法重载: 两个参数 void test( int a, int b){ System. out .println( "a and b:" +a+ "" +b); } // 方法重载: 一个 double 类型的参数 double test( double a){ System. out .println( "a:" +a); return a*a; }} 该程序的运行结果如下: No parameters a:10 a and b:10 20 a: Result of () 3 从上述程序可见, test ()被重载了 4 次。第 1 哥版本没有参数,第 2 个版本有 1 个整型参数,第 3 个版本有两个整型参数,第 4 个版本有一个 double 型参数。由于重载不受方法的返回类型的影响,第 4 个版本返回了一个和重载没有因果关系的值类型。当一个重载方法被调用时, Java 在调用方法的参数和方法的自变量之间寻找匹配。但是, 这种匹配并不总是精确的。在一些情况下, Java 的制动类型转换也适用于重载方法的自变量。示例代码如下: public class TestOverloadDemo { public static void main(String[] args) { OverloadDemo od= new OverloadDemo(); double result ; // 调用所有版本的 test 方法 int i=88; (); (10, 20); (i); // 调用 test(double) (); // 调用 test(double) }} class OverloadDemo{