Java 重写(Override)与重载(Overload)


重写(Override)

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

重写的好处在于子类可以根据需要,定义特定于自己的行为。

也就是说子类能够根据需要实现父类的方法。

在面向对象原则里,重写意味着可以重写任何现有方法。实例如下:

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();<span class="hljs-comment">// 执行 Animal 类的方法</span>b.move();<span class="hljs-comment">//执行 Dog 类的方法</span>

}
}

以上实例编译运行结果如下:

动物可以移动
狗可以跑和走

在上面的例子中可以看到,尽管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();<span class="hljs-comment">// 执行 Animal 类的方法</span>b.move();<span class="hljs-comment">//执行 Dog 类的方法</span>a.bark();<span class="hljs-comment">//执行 Animal 类的方法</span>

}
}

以上实例编译运行结果如下:

TestDog.java:30: cannot find symbol
symbol : method bark()
location: class Animal
a.bark()
;
^

该程序将抛出一个编译错误,因为a的引用类型Animal没有bark方法。


方法重写的规则

  • 参数列表必须完全与被重写方法的相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
  • 子类方法的访问权限必须大于或等于父类方法的访问权限。例如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected。
  • 父类的成员方法只能被它的子类重写。
  • 声明为final的方法不能被重写。
  • 声明为static的方法不能被重写,但是能够被再次声明。
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法。
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法。
  • 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。
  • 构造方法不能被重写。
  • 如果不能继承一个方法,则不能重写这个方法。

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 = <span class="hljs-keyword">new</span> Dog(); <span class="hljs-comment">//</span>b.move(); <span class="hljs-comment">//执行 Dog类的方法</span>

}
}

以上实例编译运行结果如下:

动物可以移动
狗可以跑和走

重载(Overload)

重载(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));
}


重写与重载之间的区别

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455528.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

银联pos小票word模板_商家pos机刷卡必须知道的知识

相信很多卡友伙伴或者商铺店家都装有pos机&#xff0c;然后一般pos机都没有使用说明书&#xff0c;更没有结合刷卡方法在内的秘籍。今天我就分享下刷卡必须知道的一些知识。刚刚办理pos机的当天一定要注意&#xff1a;使用之前呢&#xff0c;务必核对一下基本信息&#xff0c;例…

《Ext JS权威指南》——2.4节关于Ext.onReady

2.4 关于Ext.onReady 代码为什么写在Ext.onReady中&#xff0c;而不是在body中添加一个onload事件并在onload事件中运行呢&#xff1f;主要原因是Ext.onReady在DOM模型加载完毕后即可进行操作&#xff0c;而无需像onload事件那样&#xff0c;等待页面的所有资源都加载完毕后才…

git push 提交时显示 Empty reply from server的解决办法

输入 git fetch origin --prune 参考链接&#xff1a;https://stackoverflow.com/questions/28364023/gits-error-on-push-empty-reply-from-server 转载于:https://www.cnblogs.com/team42/p/6941678.html

转]移动视频监控(1)---项目综述

对于市场上的视频监控系统&#xff0c;大家都有一定的了解&#xff0c;就是视频采集&#xff0c;经过无线/有线发送到服务或代理&#xff0c;客户从服务或代理上得到视频/音频流。不复杂。 对于不远的将来&#xff0c;3G&#xff0c;4G的到来&#xff0c;对移动的业务有一个推动…

java 空接口_学Java,java接口搞明白了吗?大牛让你一文搞清楚

前言对于面向对象编程来说&#xff0c;抽象是一个极具魅力的特征。如果一个程序员的抽象思维很差&#xff0c;那他在编程中就会遇到很多困难&#xff0c;无法把业务变成具体的代码。在 Java 中&#xff0c;可以通过两种形式来达到抽象的目的&#xff0c;一种是抽象类&#xff0…

Check Point CEO:“我们正在积极寻找收购目标”

Check Point Sofrware Technologies很可能成为下一个会产生收购案的主流安全厂商&#xff0c;首席执行官Gil Shwed在该公司第二季度财报电话会议上这样表示。 “我们正在积极地寻求收购目标&#xff0c;期待无论是大规模的还是小规模的扩张&#xff0c;”Shwed表示。“我们在并…

Spark SQL 编程API入门系列之SparkSQL数据源

不多说&#xff0c;直接上干货&#xff01; SparkSQL数据源&#xff1a;从各种数据源创建DataFrame 因为 spark sql&#xff0c;dataframe&#xff0c;datasets 都是共用 spark sql 这个库的&#xff0c;三者共享同样的代码优化&#xff0c;生成以及执行流程&#xff0c;所以 s…

H.264中的一些易混淆概念

Q:PSNR 峰值信噪比 Q:是根据它来取qp是不是&#xff1f; A:不是, 和QP没有直接关系, 但是QP的选择会影响到PSNR Q: 如果不用率失真最优化&#xff0c; 为什么选择SATD&#xff0b;deltar&#xff08;mv&#xff0c;mode&#xff09;作为模式选择的依据&#xff1f;为什么运…

Java中final关键字的几种用法

在java的关键字中&#xff0c;static和final是两个我们必须掌握的关键字。不同于其他关键字&#xff0c;他们都有多种用法&#xff0c;而且在一定环境下使用&#xff0c;可以提高程序的运行性能&#xff0c;优化程序的结构。下面我们来了解一下final关键字及其用法。 final关键…

python pyqt5安装_Python3 安装PyQt5及exe打包图文教程

环境: Python 3.6.4 Pycharm Professional 2017.3.3 PyQt5 PyQt5-tools① Python 3 安装Python 3.x 安装时&#xff0c;默认勾选ADD Python 3.6 to PATH和ADD Python to environment variables的情况下&#xff0c;系统会向path中增加以下两个环境变量。D:\Program Files\Py…

《企业软件交付:敏捷与高效管理精要》——3.4 企业软件交付的软件工厂方法...

3.4 企业软件交付的软件工厂方法 正如我们前面讨论的&#xff0c;今天的机构面对的商业环境正以前所未有的速度发生变化。与此同时&#xff0c;这些机构还要管理和降低整个机构的运营成本。这就直接意味着&#xff0c;他们不仅要最大限度地减少浪费和低效率&#xff0c;还要提…

201706问题记录

1.四周阴影 box-shadow:0px 0px 10px #f5f5f5; 2. 原生setattribute()方法 jquery的attr()$(.fd-sq-zk).attr("title","收起"); 3.在iframe中获取外层容器的元素 属性等 $(parent.document).find("html")..... 4.监听页面变大变小事件 /…

一致性hash算法_(图文案例)一致性哈希算法详解 一点课堂(多岸教育)

一致性Hash算法关于一致性Hash算法&#xff0c;在我之前的博文中已经有多次提到了&#xff0c;MemCache超详细解读一文中”一致性Hash算法”部分&#xff0c;对于为什么要使用一致性Hash算法、一致性Hash算法的算法原理做了详细的解读。算法的具体原理这里再次贴上&#xff1a;…

《HTML5 Canvas游戏开发实战》——2.1 绘制基本图形

本节书摘来自华章计算机《HTML5 Canvas游戏开发实战》一书中的第2章&#xff0c;第2.1节,作者&#xff1a;张路斌著&#xff0c; 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 2.1 绘制基本图形 所谓基本图形&#xff0c;就是指线、矩形、圆等最简单的图形&#x…

如何查看Ubuntu版本

有时候需要查看一下系统安装的Ubuntu的版本&#xff0c;最简单的方式是输入lsb_release -a。whatis lsb_release输出&#xff1a;print distribution-specific information。所以lsb_release这个命令就是用来输出发行版的信息的。 Open the Terminal enter:lsb_release -a It w…

linux下.a/.so/.la目标库区别

在linux平台上编译时&#xff0c;常会遇到目标库的疑问&#xff0c;有静态库也有动态库&#xff0c;单个理解都不太难&#xff0c;但是对复杂的工程而言&#xff0c;一旦混合到一起去&#xff0c;对整个工程的理解和调用&#xff0c;将会造成很大困扰&#xff0c;本文就汇总这几…

python 二元函数绘制_Python绘制二元函数曲面

微实践&#xff1a;绘制二元函数曲面我们将演示如何借助于ufunc的广播运算计算下述二元函数的在一个xy平面上的值并将其绘制成3D曲面。其中&#xff0c;x和y的取值范围均为[-2,2]。为了达到目的&#xff0c;我们需要一个二维的结果数组z&#xff0c;其元素的下标对应参数x,y的取…

Npgsql使用入门(三)【批量导入数据】

Program.cs代码: class Program{static void Main(string[] args){var test new PgBulkCopyHelper<SingleBuilding>("bld_amap_gzmain");foreach (string pName in test.PropNames){Console.WriteLine("name: {0},\t\ttype: {1}", pName, test.Prop…

远程网络视频监视技术

目前要实现广域网视频监视&#xff0c;主要通过三种方式实现&#xff1a;1.硬盘录像机&#xff1b;2.网络视频服务器&#xff1b;3.网络摄像机。 硬盘录像机是一个以录像为主的设备&#xff0c;有的可以支持IE浏览。网络视频服务器一般前端不录像&#xff0c;直接将影像传输到…

Deepin下java开发环境部署

简介 本经验由深度论坛用户(zhang12345shun)分享&#xff0c;原文地址 正文 SUN JDK&#xff08;现已改名Oracle JDK&#xff09; 1.下载Sun版JDK压缩包&#xff08;.tar.gz&#xff09;&#xff0c;选择其中的32/64位Linux版本。 2.将其解压缩&#xff1a; sudo tar -zx…