-
2022-02-18 16:57:18
子类在继承父类方法的基础上,对父类方法重新定义并覆盖的操作叫做方法重写(构造方法不能被重新)。
函数或者方法有相同的名称,但是参数列表不相同,这样的同名不同参数的函数或者方法之间,互相称之为重载。
一、方法重写的规则:
1、父子类的方法名相同。
2、父子类的方法参数列表相同。
3、子类方法的返回值与父类方法返回值类型相同或者是其子类。
4、子类方法的访问权限不能小于父类。二、方法重写 和 方法重载的区别:
1、位置:方法重写在子类中对父类方法进行重写,方法重载是在同一个类中。
2、方法名:方法重写相同,方法重载相同。
3、参数列表:方法重写相同,方法重载不同。
4、返回值:方法重写相同或是其子类,方法重载没有要求。
5、访问权限:方法重写不能小于父类,方法重载没有要求。更多相关内容 -
Java方法重载和重写原理区别解析
2020-08-19 12:04:12主要介绍了Java方法重载和重写原理区别解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
Java中方法重载与重写的区别
2020-12-22 15:27:35方法的重载是同一个类中多态性的一种表现。 方法重载须遵循如下两条规则 (1)方法名相同。 (2)参数列表不同。 注意:方法的返回值类型不能用来区分重载的方法。这是因为当调用一个方法时,返回值... -
JAVA中方法的重载与重写
2022-03-23 16:22:46方法的重写 概念:方法的重写就是子类集成父类之后,可以对父类的同名,同参数的方法进行覆盖。在子类对象调用该方法的时候,用的是子类方法中重写的逻辑。父类对象调用的时候,就是父类方法自己的逻辑。 我们可以...方法的重写
概念:方法的重写就是子类集成父类之后,可以对父类的同名,同参数的方法进行覆盖。在子类对象调用该方法的时候,用的是子类方法中重写的逻辑。父类对象调用的时候,就是父类方法自己的逻辑。
我们可以新建两个类,一个People类,一个Student类,Student类 extends People类。
people类中有eat()方法:
Student中也有eat()方法,并且对People类中的eat方法实现了重写。
再调用eat方法的时候,如果对象是Student,那么执行的就是Student类中的重写方法:
如果只是People方法去调用eat,就是people类中原生的eat方法
重写的特殊情况
1、子类不能重写父类中 private修饰的方法,
例如我们把People中的eat方法修饰符改为private
在Student类继承People之后,尝试重写eat()方法,发现没有重写方法的标志。
2、 子类重写的方法的修饰符不小于父类的方法的修饰符
将People中的eat方法的修饰符改为 protected
在Student中尝试进行重写:修饰符为 public 、protected 都可以
3、 父类中的方法的返回值为Void,则子类重写的方法返回值也只能是Void
4、 父类中的方法的返回值为A类型,则子类重写的方法返回值可以是A类型,也可以是A类型的子类
在People类中增加一个返回值为Object,名称为getNum()的方法
在Student中重写名称为getNum()的方法,返回值类型可以为String ,可以看到也实现了重写
5、 父类中的方法的返回值为基本数据类型(int、double、、、、),则子类重写的方法返回值也必须是相同的类型
方法的重载
概念:方法的重载是在某一个类中,方法的方法名相同,方法的参数个数,参数类型不同。
-
Java 重写与重载方法与区别详解
2020-08-30 19:55:28本篇文章通过实例详细介绍了重写与重载,以及他们的区别,需要的朋友可以参考下 -
java 函数的重载和重写实例代码
2020-09-01 23:44:06本文主要介绍Java 的重载和重写,学习java的同学都知道Java的多态有多重要,这里给大家举例说明函数的重载和重写,希望能帮助有需要的小伙伴 -
Java方法重写与重载的区别
2018-08-23 10:26:39Java方法重写与重载 一、方法重写(0veriding) 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。 子类可以定义新的特征,当子类需要修改父类...Java方法重写与重载
一、方法重写(0veriding)
在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。
子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。
重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。
在Java中覆盖继承父类的方法就是通过方法的重写来实现的。所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。
这样,就可以实现对父类方法的覆盖。如果子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果现在一定要调用父类中的方法该怎么办呢?
此时,通过使用super关键就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。
如果要使用super关键字不一定非要在方法重写之后使用,也可以明确地表示某个方法是从父类中继承而来的。使用super只是更加明确的说,要从父类中查找,就不在子类查找了。
重写的好处在于子类可以根据需要,定义特定于自己的行为。
也就是说子类能够根据需要实现父类的方法。
在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Dog extends Animal{ public void move(){ System.out.println("狗可以跑和走"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();//执行 Dog 类的方法 } } //运行结果 动物可以移动 狗可以跑和走
在上面的例子中可以看到,尽管b属于Animal类型,但是它运行的是Dog类的move方法。
这是由于在编译阶段,只是检查参数的引用类型。
然而在运行时,Java虚拟机(JVM)指定对象的类型并且运行该对象的方法。
因此在上面的例子中,之所以能编译成功,是因为Animal类中存在move方法,然而运行时,运行的是特定对象的方法。
思考以下例子:class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Dog extends Animal{ public void move(){ System.out.println("狗可以跑和走"); } public void bark(){ System.out.println("狗可以吠叫"); } } public class TestDog{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();//执行 Dog 类的方法 b.bark(); } } //以上实例编译运行结果如下: TestDog.java:30: cannot find symbol symbol : method bark() location: class Animal b.bark();
该程序将抛出一个编译错误,因为b的引用类型Animal没有bark方法。
二、重写规则
在重写方法时,需要遵循以下的规则:
(一) 父类方法的参数列表必须完全与被子类重写的方法的参数列表相同,否则不能称其为重写而是重载。(二) 父类的返回类型必须与被子类重写的方法返回类型相同,否则不能称其为重写而是重载。
(三) Java中规定,被子类重写的方法不能拥有比父类方法更加严格的访问权限。编写过Java程序的人就知道,父类中的方法并不是在任何情况下都可以重写的,当父类中方法的访问权限修饰符为private时,该方法只能被自己的类访问,不能被外部的类访问,在子类是不能被重写的。如果定义父类的方法为public,在子类定义为private,程序运行时就会报错。
(四) 由于父类的访问权限修饰符的限制一定要大于被子类重写方法的访问权限修饰符,而private权限最小。所以如果某一个方法在父类中的访问权限是private,那么就不能在子类中对其进行重写。如果重新定义,也只是定义了一个新的方法,不会达到重写的效果。
(五) 在继承过程中如果父类当中的方法抛出异常,那么在子类中重写父类的该方法时,也要抛出异常,而且抛出的异常不能多于父类中抛出的异常(可以等于父类中抛出的异常)。换句话说,重写方法一定不能抛出新的检查异常,或者比被重写方法声明更加宽泛的检查型异常。例如,父类的一个方法申明了一个检查异常IOException,在重写这个方法时就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常。同样的道理,如果子类中创建了一个成员变量,而该变量和父类中的一个变量名称相同,称作变量重写或属性覆盖。但是此概念一般很少有人去研究它,因为意义不大。
Super关键字的使用
当需要在子类中调用父类的被重写方法时,要使用super关键字。class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Dog extends Animal{ public void move(){ super.move(); // 应用super类的方法 System.out.println("狗可以跑和走"); } } public class TestDog{ public static void main(String args[]){ Animal b = new Dog(); // Dog 对象 b.move(); //执行 Dog类的方法 } } //以上实例编译运行结果如下: 动物可以移动 狗可以跑和走
三、方法重载(Overloading)
方法重载是让类以统一的方式处理不同类型数据的一种手段。调用方法时通过传递给它们的不同个数和类型的参数来决定具体使用哪个方法,这就是多态性。
所谓方法重载是指在一个类中,多个方法的方法名相同,但是参数列表不同。参数列表不同指的是参数个数、参数类型或者参数的顺序不同。
方法的重载在实际应用中也会经常用到。不仅是一般的方法,构造方法也可以重载。
在方法重载时,方法之间需要存在一定的联系,因为这样可以提高程序的可读性,一般只重载功能相似的方法。
重载是指我们可以定义一些名称相同的方法,通过定义不同的参数来区分这些方法,然后再调用时,Java虚拟机就会根据不同的参数列表来选择合适的方法执行。也就是说,当一个重载方法被调用时,Java用参数的类型或个数来决定实际调用的重载方法。因此,每个重载方法的参数的类型或个数必须是不同。
虽然每个重载方法可以有不同的返回类型,但返回类型并不足以区分所使用的是哪个方法。
当Java调用一个重载方法是,参数与调用参数匹配的方法被执行。在使用重载要注意以下的几点:
1.在使用重载时只能通过不同的参数列表,必须具有不同的参数列表。
2.不能通过访问权限、返回类型、抛出的异常进行重载。
3.方法的异常类型和数目不会对重载造成影响。
4.可以有不同的返回类型,只要参数列表不同就可以了。
5.可以有不同的访问修饰符。
6.可以抛出不同的异常。重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型呢?可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
只能重载构造函数四、重载规则
被重载的方法必须改变参数列表;
被重载的方法可以改变返回类型;
被重载的方法可以改变访问修饰符;
被重载的方法可以声明新的或更广的检查异常;
方法能够在同一个类中或者在一个子类中被重载。public class Overloading { public int test(){ System.out.println("test1"); return 1; } public void test(int a){ System.out.println("test2"); } //以下两个参数类型顺序不同 public String test(int a,String s){ System.out.println("test3"); return "returntest3"; } public String test(String s,int a){ System.out.println("test4"); return "returntest4"; } public static void main(String[] args){ Overloading o = new Overloading(); System.out.println(o.test()); o.test(1); System.out.println(o.test(1,"test3")); System.out.println(o.test("test4",1)); } }
五、访问修饰符
访问修饰符 本类 同包 子类 其他 private √ 默认 √ √ protected √ √ √ public √ √ √ √ 六、总结
重写与重载之间的区别
方法重载:
1、同一个类中
2、方法名相同,参数列表不同(参数顺序、个数、类型)
3、方法返回值、访问修饰符任意
4、与方法的参数名无关方法重写:
1、有继承关系的子类中
2、方法名相同,参数列表相同(参数顺序、个数、类型),方法返回值相同
3、访问修饰符,访问范围需要大于等于父类的访问范围
4、与方法的参数名无关区别点 重载方法 重写方法 参数列表 必须修改 一定不能修改 返回类型 可以修改 一定不能修改 异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常 访问 可以修改 一定不能做更严格的限制(可以降低限制) -
Java中方法的重载和重写的区别。
2021-10-11 16:56:58一、定义上的区别: 1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。...①参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。 ②返回的类型必须一直与被重写的方法的返回类一、定义上的区别:
1、重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数。
2、覆盖(也叫重写)是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。二、规则上的不同:
1、重载的规则:
①必须具有不同的参数列表。
②可以有不同的访问修饰符。
③可以抛出不同的异常。2、重写方法的规则:
①参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
②返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。
③访问修饰符的限制一定要大于被重写方法的访问修饰符。
④重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常。三、类的关系上的区别:
重写是子类和父类之间的关系,是垂直关系;重载是同一个类中方法之间的关系,是水平关系。
-
java中方法重载与方法重写的区别
2022-02-16 19:44:53java中方法重载与方法重写的区别 -
Java中方法重写与方法重载的区别
2021-03-18 00:46:25方法重写: 是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中... -
Java中方法重载和重写的区别(详解)
2021-04-01 13:45:15Java中方法重载和重写方法重载什么是方法重载重载规则实现理论方法重载的意义方法重载注意点方法重写什么是方法重写重写规则方法重写的意义方法重写的注意点Idea快捷键权限修饰符总结 方法重载 什么是方法重载 方法... -
Java中重载与重写的对比与区别
2020-08-31 03:22:37主要介绍了Java中重载与重写的对比与区别的相关资料,需要的朋友可以参考下 -
java中的方法重载与重写
2021-10-09 20:38:10方法的重写是java多态的表现,大多是发生在父类与子类之间,即子类重写父类中的方法。重写要求方法名相同,访问权限不能低于父类,说到访问权限,那我们就来稍加复习一下访问权限的大小,public(所有类都可以访问... -
Java中方法的重写与成员变量的隐藏
2020-08-28 16:31:09讨论了Java面向对象概念中一个基本的概念–Field Hiding(隐藏成员变量),文中给大家介绍了java中的重写知识,非常不错,具有参考借鉴价值,需要的朋友参考下吧 -
Java 方法重载和方法重写
2021-02-28 17:23:04方法重载的规则如下:重载的方法必须具有不同的参数列表重载的方法可以有不同的返回值类型重载的方法可以有不同的访问修饰符代码清单-1:/*** 重载方法示例** author jackie*/public class Overl... -
Java中的静态方法能否被重写?
2020-12-22 19:27:57* 非静态方法属于类的实例,是可以被子类重写,从而达到多态的效果; 静态方法属于类,是不能被重写,故而也不能实现多态。 * 下面是具体的验证过程 首先,定义一个超类A,里边定义一个静态方法和一个非... -
Java中方法的重载与方法的重写介绍
2021-04-06 08:16:27Java中方法的重载与重写1、方法的签名我们知道,方法的定义是由五个要素组成的,分别是修饰符、返回值类型、方法名称、方法参数以及方法体。那么将方法名称和方法参数放在一起,则称为这个方法的签名,简称方法签名... -
Java重写与重载(区别与用途)
2020-12-22 19:27:35我根据我的理解来谈谈Java中重写方法与重载方法的区别。 重写 Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类... -
JAVA中方法重写与重载的区别
2021-03-06 01:42:33Java中方法重写与重载的区别 -
Java重写(Override)与重载(Overload)区别原理解析
2020-08-25 02:56:27主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 -
Java构造方法 重载与重写
2019-04-18 18:10:44内容部分引自《Java语言程序设计》...构造方法的作用是初始化对象,也可以重载(即-可以有多个同名的构造方法,但是需要有不同的签名) 一个类可以不定义构造方法,类中会隐含创建一个方法体为空的构造方法(类中... -
java中重载与重写
2015-11-10 14:55:39重载与重写的区别,详细描述了java中重载与重写的区别。 -
java 中方法的重载和重写
2021-02-27 15:04:021、方法的重载概念:在同一个类中,方法名相同,参数列表(参数类型和参数个数)不同的方法称为方法重载;和访问修饰符、返回值类型无关;例如在dog类中定义两个eat()方法:public class dog extends animal{public ... -
方法重写与方法重载的区别详解
2019-05-24 21:44:46文章目录1、方法重写(Override)概念:好处:注意:重写规则:2、方法重载(Overload)概念:注意重载规则:3、重写与重载直接的区别4、简明了解5、总结(硬)6、图解 1、方法重写(Override) 概念: 重写是子类对... -
java中的方法重写与方法重载
2019-10-13 22:14:03java中的方法重写与方法重载 一、方法重载 方法重载主要是指,其方法要实现的功能一样,但是需要的参数类型和个数不同,需要进行方法重载; 重载的方法的参数值列表不相同,例如: public int add(int a, int ... -
java中方法重载和重写的区别
2018-08-16 10:34:08方法重载和重写,光从名称上来说,很类似,也很容易弄错,接下来我们先简述两者的区别和联系。 1. 方法重载 首先方法重载是同一个类中的不同方法间的关系,这些方法具有同名(方法名一样),但是具有不同的参数... -
Java编程子类能否重写父类的静态方法探索
2020-08-29 01:19:22关于子类能否重写父类的静态方法,对像我这种初级的编程爱好者来说仍是值得讨论的一件事,下面我们通过具体实例,对此问题进行简单的探索。 -
实例分析java中重载与重写的区别
2020-09-04 09:17:12主要介绍了实例分析java中重载与重写的区别,需要的朋友可以参考下