Java 方法重载和多态

先来看看什么是方法重载?

方法重载的要求是:方法名相同,参数列表不同(不同的参数类型或者参数顺序或者参数个数)。至于方法的其他部分,如方法返回值类型和修饰符,与方法重载没有任何关系。最好加上@Overload注解。

为什么要用方法重载?

重载的目的是方便程序员调用方法。比如,System.out.println()这个函数是用来输出的,当输出的是整数时是用这个方法,当输出一个字符串时还是用这个方法。根据传入参数的不同,自动找到匹配的方法。

以下程序不使用方法重载,试着分析看看有什么缺点。

public class methodtest07{ public static void main(String[] args){  //缺点:对于程序员来说,需要记忆三个不同的方法System.out.println(Compute.sumint(128,42));System.out.println(Compute.sumdouble(121.23,242.432));System.out.println(Compute.sumlong(234L,3242L));} }class Compute{public static int sumint(int a,int b){return a+b;}public static double sumdouble(double a,double b){return a+b;}public static long sumlong(long a,long b){return a+b;}}

上述代码的缺陷就是程序员得记住三个不同的方法。(头大)

结合代码来看看哪些情况属于方法重载?代码后面有详细的注释。

//以下方法构成方法重载public static void m1(int a){}public static void m1(double a){}

public static void m2(int a,int b){}public static void m2(int a){}

public static void m3(int a,double b){}public static void m3(double a,int b){}

//以下m4方法不构成方法重载public static void m4(int a){}public static void m4(int b){}  //方法重复,编译无法通过

//m5方法不构成方法重载   方法的重载和方法的返回值类型无关public static void m5(){}public static int m5(){ return 100; }//m6不构成方法的重载  方法的重载和方法的修饰符列表无关static void m6(){}public static void m6(){} }

总结一下,方法的重载:

1.发生在同一个类中

2.方法名相同

3.参数列表不同(参数的类型,个数,顺序不同)

4.和返回值类型无关

5.和方法的修饰符列表无关

什么是多态?

多态是指允许不同类的对象对同一消息做出响应。即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。继承在为多态的实现做了准备。子类继承父类,我们可以编写一个指向子类的父类类型引用,该引用既可以处理父类对象,也可以处理子类对象,当相同的消息发送给子类或者父类对象时,该对象就会根据自己所属的引用而执行不同的行为,这就是多态。即多态性就是相同的消息使得不同的类做出不同的响应。

Java实现多态有三个必要条件:继承,重写,向上转型。

继承:在多态中必须存在有继承关系的子类和父类。

重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。

向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。

只有满足了上述三个条件,我们才能够在同一个继承结构中使用同一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。下面结合代码理解。

public class Quadrangle { // 实例化保存四边形对象的数组对象 private Quadrangle[] qtest = new Quadrangle[6]; private int nextIndex = 0; public void draw(Quadrangle q) { // 定义draw()方法,参数为四边形对象   if (nextIndex < qtest.length) {     qtest[nextIndex] = q;     System.out.println(nextIndex);     nextIndex++;   } public static void main(String[] args) {   // 实例化两个四边形对象,用于调用draw()方法   Quadrangle q = new Quadrangle();   q.draw(new Square()); // 以正方形对象为参数调用draw()方法   // 以平行四边形对象为参数调用draw()方法   q.draw(new Parallelogramgle()); }}class Square extends Quadrangle { // 定义一个正方形类,继承四边形类 public Square() {   System.out.println("正方形"); }}

// 定义一个平行四边形类,继承四边形类class Parallelogramgle extends Quadrangle { public Parallelogramgle() {   System.out.println("平行四边形"); }}

输出:

正方形0平行四边形1

从本实例运行的结果可以看出,以不同类对象为参数调用draw()方法可以处理不同的图像类问题,程序员无须在所有的子类中定义执行相同功能的方法,只要实例化一个继承父类的子类对象即可调用相应的方法,只要维护父类中的这个方法即可。

搜索微信公众号“程序员考拉”,欢迎关注!

原文地址:https://www.cnblogs.com/naihuangbao/p/9445014.html

时间: 2024-10-13 13:41:19

Java 方法重载和多态的相关文章

Java之方法重写、方法重载、多态

Java之方法重写.方法重载.多态博客分类: java语言Java重写重载多态 一.方法重写(Override) 子类可以重写父类的方法. 方法的返回值类型.参数类型.参数个数都不能改变,只能重写方法体. 方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型必须完全与被重写方法的返回类型相同: 访问权限不能比父类中被重写的方法的访问权限更低. 例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected. 解释:用于多态(父类引用子类对象). 声明

java方法——重载2

什么是Java方法重载 方法重载的定义 1 对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数.类型.顺序至少有一个不一样,这时候局构成方法重载. END 方法重载示例 1 public class Test{ public void a( ){ }; public void a( int i){ }; } 说明:在Test类中有两个方法,名字都相同,都是a.在调用方法a时,如果不传参数,则系统会自动调用第一个方法a,如果传入一个 int 类型的参数,则系统调用第二个方法a

Java学习资料-方法覆盖、方法重载、多态与动态绑定

1.方法覆盖 方法覆盖就是子类定义一个和父类同名的方法来覆盖父类的方法.当父类方法在某些子类中被覆盖后,通常是子类调用父类,并做一些额外的其它工作. 使用方法覆盖应注意下面一些事项: 不使用super而希望引用父类方法会导致无限的递归,因为子类方法实际上是在调用它自己. 当通过父类引用调用一个方法时,Java会正确地选择与那个对象对应的类的覆盖方法.对于父类提供的方法,子类可以覆盖它,但这不是必须的,即子类也可以使用一个方法的父类版本. 方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完

Java 方法重载,方法重写(覆盖),继承等细节注意

1.方法重载(method overload)的具体规范 如果有两个方法的方法名相同,但参数不一致,那么可以说一个方法是另一个方法的重载. 一.方法名一定要相同. 二.方法的参数表必须不同,包括参数的类型或个数,以此区分不同的方法体. 1.如果参数个数不同,就不管它的参数类型了! 2.如果参数个数相同,那么参数的类型或者参数的顺序必须不同. 三.方法的返回类型.修饰符可以相同,也可不同. 四.main方法也可以被重载 方法重载的作用:可以一个相同的方法传入不同的参数以达到想要的结果 2.方法继承

java 方法重载与重写的归纳

方法重载:Java的方法重载,就是在类中可以创建多个方法,它们可以有相同的名字,但必须具有不同的参数,即或者是参数的个数不同,或者是参数的类型不同.调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法 示例代码: public class Test { //无返回值有有int形的参数 void receive(int i) {System.out.println("i="+i);} //无返回值,有float形的参数 void receive(float f) {Sys

java方法重载学习笔记

java中方法的重载 (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段.多个同名函数同时存在,具有不同的参数个数/类型. 重载Overloading是一个类中多态性的一种表现. (2) java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义. 调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性. (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同.无法以返回型别作为重

好程序员训练营-Java方法重载

<A href="http://www.goodprogrammer.org/" target="blank">android培训</a>------我的java笔记,期待与您交流! 在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading). 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺序,只要有一个不同就叫做参数列表不同. 重载是面向对象的一个基

Java 方法重载与引用数组类型

1.方法重载 1)方法的签名 方法的签名包含方法名和参数列表 一个类中,不可以有两个方法的签名完全相同,即一个类中不能有两个方法的方法名和参数列表都一样. public class Test{ public void print(int x){...}; public void print(int x){...}; //编译错误,方法签名不能一样 } public class Test{ public void print(int x){...}; public boolean print(in

学习日记(九)java方法重载和重写

方法的重载:在一个类中的两个或两个以上的方法,他们方法名相同但是参数列表不同,这种方式称为方法的重载,方法的重载是实现多态性的方式之一. 参数列表不同指的是参数的个数不同或相同的个数但顺序不同或者类型不同,方法重载时返回值类型可以不同,但是仅仅是返回值类型不同的话不可以. java在调用方法的时候,如果精确匹配没有对应的方法,会自动转换匹配相应的方法,例如,如果没有int类型的参数,但是有一个double类型的参数的同名方法,在调用该方法时如果传入int类型的参数,则不会报错,而是把int自动转