您的位置:制图网首页 -> 新闻动态 -> 重载变频器【重载和重写的区别】

热门排行

重载变频器【重载和重写的区别】

2023/1/31 来自于:制图网 点击:75

面试题: 重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分

面试官考察点猜想#

这道题纯粹只是考查基础理论知识,对实际开发工作中没有太多的指导意义,毕竟编辑器都有语法提示功能,如果没写正确,会有错误提示。

背景知识详解#

关于重载(Overload)和重写(Override),在实际开发中使用非常频繁,涉及到的背景知识并不难。

重写#

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重写是发生在类的继承关系,或者类的实现关系中的,重写后的方法和原方法需要保持完全相同的返回值类型、方法名、参数个数以及参数类型,简单来说,就是子类重写的方法必须和父类保持完全一致

类的继承关系#

我们来看下面这个基于继承关系的例子。

class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Bird extends Animal{ public void move(){ System.out.println("鸟可以飞"); } } class Dog extends Animal{ public void move(){ System.out.println("狗可以跑") } } public class TestMain{ public static void main(String args[]){ Animal a = new Animal(); // Animal 对象 Animal b = new Bird(); //Bird对象 Animal c = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move(); //执行Bird类的方法 c.move();//执行 Dog 类的方法 } }

上述程序运行的结果

动物可以移动 鸟可以飞 狗可以跑

在这个案例中,Animal是一个属于动物的抽象类,它定义了一个方法move()。表示动物的具有的行为。

而动物只是一个泛类别,具体到某种动物时,行为方式是不同的,因此定义了Bird和Doc,分别继承了Animal这个类,并且重写了move()方法,分别实现这两种动物的行为方式。

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

在类继承关系中,父类的非抽象方法,子类是不强制要求重写的。在实际应用中,如果重写了父类的方法,并且实例对象的引用指向的是子类时,JVM会自动调用子类重写的方法,此时,父类的方法完全被屏蔽了。就像前面测试的代码。

父类引用指向子类实现Dog(),此时调用c.move()方法,只会调用到Dog类中的move()方法。如果Dog子类没有重写move()方法,则会调用父类Animal的move()方法。

Animal c = new Dog(); // Dog 对象 c.move();//执行 Dog 类的方法

在有些情况下,子类重写了父类的方法,我们希望在调用子类重写方法的同时,仍然能够调用到父类被重写的方法,怎么实现?

Super关键字#

当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

class Animal{ public void move(){ System.out.println("动物可以移动"); } } class Bird extends Animal{ public void move(){ super.move(); //增加super调用 System.out.println("鸟可以飞"); } } } public class TestMain{ public static void main(String args[]){ Animal b = new Bird(); //Bird对象 b.move();//执行 Bird 类的方法 } }

运行结果如下:

动物可以移动 鸟可以飞 方法的重写规则#

总结一下,在Java中,方法重写的规则。

参数列表与被重写方法的参数列表必须完全相同。返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。父类的成员方法只能被它的子类重写。声明为 final 的方法不能被重写。声明为 static 的方法不能被重写,但是能够被再次声明。子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。构造方法不能被重写。如果不能继承一个类,则不能重写该类的方法。基于接口实现的重写#

基于接口实现的重写,在实际应用中,使用非常频繁,以线程实现为例,如图所示,表示Thread和Runnable的类关系图。

重载变频器【重载和重写的区别】

Runnable是一个接口,它定义了线程的执行方法,代码如下:

@FunctionalInterface public interface Runnable { /** * When an object implementing interface

制图网(www.makepic.net),专业的logo免费设计在线生成网站,全自动智能化logo设计,商标设计,logo在线生成!

欢迎使用制图网制作属于您公司自己的logo,不仅专业而且经济实惠,全方位满足您公司品牌化、视觉化的需求。

输入激活码

只需简单一步,使用微信扫码(或长按识别二维码)并在任一小程序首页根据提示获取激活码! chatGPT中文网页版,无需注册,快来体验全网最火爆的人工智能应用!
刻字印章刻章子定刻光敏盖章印订制(淘宝商家)

输入激活码

只需简单一步,使用微信扫码(或长按识别二维码)并在任一小程序首页根据提示获取激活码! chatGPT中文网页版,无需注册,快来体验全网最火爆的人工智能应用!
刻字印章刻章子定刻光敏盖章印订制(淘宝商家)