重写(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();// 执行 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方法。
方法的重写规则
参数列表必须完全与被重写方法的相同;
返回类型必须完全与被重写方法的返回类型相同;
访问权限不能比父类中被重写的方法的访问权限更高。例如:如果父类的一个方法被声明为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 = new Dog(); // Dog 对象
b.move(); //执行 Dog类的方法
}
}
以上实例编译运行结果如下:
动物可以移动 狗可以跑和走
重载(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));
}
}
重写与重载之间的区别
| 区别点 | 重载方法 | 重写方法 |
| 参数列表 | 必须修改 | 一定不能修改 |
| 返回类型 | 可以修改 | 一定不能修改 |
| 异常 | 可以修改 | 可以减少或删除,一定不能抛出新的或者更广的异常 |
| 访问 | 可以修改 | 一定不能做更严格的限制(可以降低限制) |
希望本篇文章对各位朋友有所帮助
# Java重写与重载区别
# Java重写与重载
# Java
# 重写
# 重载
# java 重载(overload)与重写(override)详解及实例
# Java重写与重载之间的区别
# 实例分析java中重载与重写的区别
# Java方法重载和重写原理区别解析
# Java重写(Override)与重载(Overload)区别原理解析
# Java基础之重载(Overload)与重写(Override)详解
# JAVA中重写(Override)与重载(Overload)的相关示例
# 子类
# 类中
# 抛出
# 的是
# 在上面
# 自己的
# 访问权限
# 包中
# 这是
# 是在
# 是因为
# 在同一个
# 更高
# 可以看到
# 就不能
# 或删除
# 在一
# 能做
# 则可
相关文章:
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
如何通过FTP服务器快速搭建网站?
建站主机如何选?性能与价格怎样平衡?
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何选择适配移动端的WAP自助建站平台?
整蛊网站制作软件,手机不停的收到各种网站的验证码短信,是手机病毒还是人为恶搞?有这种手机病毒吗?
css网站制作参考文献有哪些,易聊怎么注册?
如何通过主机屋免费建站教程十分钟搭建网站?
建站主机选哪家性价比最高?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
C#如何序列化对象为XML XmlSerializer用法
零服务器AI建站解决方案:快速部署与云端平台低成本实践
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
如何用y主机助手快速搭建网站?
金*站制作公司有哪些,金华教育集团官网?
齐河建站公司:营销型网站建设与SEO优化双核驱动策略
如何用好域名打造高点击率的自主建站?
简历在线制作网站免费,免费下载个人简历的网站是哪些?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
如何在Golang中使用replace替换模块_指定本地或远程路径
视频网站app制作软件,有什么好的视频聊天网站或者软件?
如何快速搭建安全的FTP站点?
如何选择建站程序?包含哪些必备功能与类型?
如何实现建站之星域名转发设置?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
如何在Windows 2008云服务器安全搭建网站?
如何安全更换建站之星模板并保留数据?
独立制作一个网站多少钱,建立网站需要花多少钱?
如何在IIS中新建站点并解决端口绑定冲突?
单页制作网站有哪些,朋友给我发了一个单页网站,我应该怎么修改才能把他变成自己的呢,请求高手指点迷津?
沈阳制作网站公司排名,沈阳装饰协会官方网站?
javascript基本数据类型及类型检测常用方法小结
建站主机选择指南:服务器配置与SEO优化实战技巧
网站制作公司,橙子建站是合法的吗?
如何通过虚拟机搭建网站?详细步骤解析
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
已有域名如何免费搭建网站?
如何在建站主机中优化服务器配置?
内部网站制作流程,如何建立公司内部网站?
建站之星备案是否影响网站上线时间?
建站之星北京办公室:智能建站系统与小程序生成方案解析
如何快速打造个性化非模板自助建站?
seo网站制作优化,网站SEO优化步骤有哪些?
建站之星如何实现网站加密操作?
山东网站制作公司有哪些,山东大源集团官网?
Swift中swift中的switch 语句
深入理解Android中的xmlns:tools属性
如何用狗爹虚拟主机快速搭建网站?
建站之星展会模版如何一键下载生成?
*请认真填写需求信息,我们会在24小时内与您取得联系。