经过测试

覆盖的好处是能够定义特定于子类类型的行为,这意味着子类可以根据其要求实现父类方法。

用面向对象的术语来说,覆盖是指覆盖现有方法的功能。

示例class Animal {

public void move() {

System.out.println("Animals can move");

}

}

class Dog extends Animal {

public void move() {

System.out.println("Dogs can walk and run");

}

}

public class TestDog {

public static void main(String args[]) {

Animal a = new Animal(); // Animal reference and object

Animal b = new Dog(); // Animal reference but Dog object

a.move(); // runs the method in Animal class

b.move(); // runs the method in Dog class

}

}

输出结果Animals can move

Dogs can walk and run

在上面的示例中,您可以看到,即使b是Animal的一种,它也会在Dog类中运行move方法。原因是:在编译时,对引用类型进行检查。但是,在运行时中,JVM会找出对象类型并运行属于该特定对象的方法。

因此,在上面的示例中,由于Animal类具有方法move,因此程序将正确编译。然后,在运行时,它将运行特定于该对象的方法。

示例class Animal {

public void move() {

System.out.println("Animals can move");

}

}

class Dog extends Animal {

public void move() {

System.out.println("Dogs can walk and run");

}

public void bark() {

System.out.println("Dogs can bark");

}

}

public class TestDog {

public static void main(String args[]) {

Animal a = new Animal(); // Animal reference and object

Animal b = new Dog(); // Animal reference but Dog object

a.move(); // runs the method in Animal class

b.move(); // runs the method in Dog class

b.bark();

}

}

输出结果TestDog.java:26: error: cannot find symbol

b.bark();

^

symbol: method bark()location: variable b of type Animal

1 error

由于b的引用类型Animal没有树皮名称的方法,因此该程序将引发编译时错误。

方法覆盖规则参数列表应与重写方法的列表完全相同。

返回类型应该与超类中原始重写方法中声明的返回类型相同或为该子类型的子类型。

访问级别不能比重写方法的访问级别更严格。例如:如果将超类方法声明为public,则子类中的覆盖方法不能为private或protected。

实例方法只有在子类继承的情况下才能被覆盖。

声明为final的方法不能被覆盖。

声明为static的方法不能被覆盖,但可以重新声明。

如果无法继承方法,则无法覆盖该方法。

与实例的超类相同的包中的子类可以覆盖未声明为私有或最终的任何超类方法。

不同包中的子类只能覆盖声明为public或protected的非最终方法。

无论重写方法是否引发异常,重写方法都可以引发任何uncheck异常。但是,重载方法不应抛出比被重载方法声明的异常新的或更广泛的检查异常。与重写方法相比,重写方法可以引发更窄或更少的异常。

构造函数不能被覆盖。

使用超级关键字

调用覆盖方法的超类版本时,将使用super关键字。

示例class Animal {

public void move() {

System.out.println("Animals can move");

}

}

class Dog extends Animal {

public void move() {

super.move(); // invokes the super class method

System.out.println("Dogs can walk and run");

}

}

public class TestDog {

public static void main(String args[]) {

Animal b = new Dog(); // Animal reference but Dog object

b.move(); // runs the method in Dog class

}

}

输出结果Animals can move

Dogs can walk and run

测试

java 不同包子类 覆盖_Java中不同方法的覆盖方法相关推荐

  1. java 内联调用深度_Java中内联虚拟方法调用的性能

    java 内联调用深度 总览 动态编译的好处之一是它能够支持在虚拟方法代码上的广泛方法内联. 内联代码可提高性能时,代码仍必须检查类型(以防由于优化而更改了类型)或在多个可能的实现之间进行选择. 这导 ...

  2. java怎么判断类相同_java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用“===”是什么意思...

    导航:网站首页 > java中如何判定两个对象属于同一类 两个对象是不是类的相同实例,即用"==="是什么意思 java中如何判定两个对象属于同一类 两个对象是不是类的相同实 ...

  3. java file delete 不及时_java中File的delete()方法刪除文件失敗的原因

    一般來說 java file.delete失敗 有以下幾個原因 1.看看是否被別的進程引用,手工刪除試試(刪除不了就是被別的進程占用) 2.file是文件夾 並且不為空,有別的文件夾或文件, 3.極有 ...

  4. Java正则工具类从地址中提取省市区

    Java正则工具类从地址中提取省市区 最近有个需求,从一串地址中提取出省市区,然后开始寻找解决方案,最终通过网上一些正则,再加上自己改动的,貌似弄成一个比较匹配的工具类,其中代码如下,有需要的可以参考 ...

  5. 对Java的URL类支持的协议进行扩展的方法

    转载自   对Java的URL类支持的协议进行扩展的方法 JAVA默认提供了对file,ftp,gopher,http,https,jar,mailto,netdoc协议的支持.当我们要利用这些协议来 ...

  6. java preference,Java使用Preference类保存上一次记录的方法

    本文实例讲述了Java使用Preference类保存上一次记录的方法.分享给大家供大家参考.具体分析如下: 在使用java中JFileChooser选择文件的时候,我们总希望在下次打开的时候能保存上次 ...

  7. 要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上。Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列

    要绘图,首先得调整画笔,待画笔调整好之后,再将图像绘制到画布上,这样才可以显示在手机屏幕上.Android 中的画笔是 Paint类,Paint 中包含了很多方法对其属性进行设置,主要方法(没有全部列 ...

  8. java 静态方法覆盖_Java中方法的覆盖和静态方法的隐藏

    下面的程序对巴辛吉小鬣狗和其它狗之间的行为差异进行了建模.如果你不知道 什么是巴辛吉小鬣狗,那么我告诉你,这是一种产自非洲的小型卷尾狗,它们从 来都不叫唤.那么,这个程序将打印出什么呢? class ...

  9. java 中random类使用_Java中的天使和魔鬼:Unsafe类

    我们在看ConcurrentHashMap源码时经常看到Unsafe类的使用,今天我们来了解下Unsafe类. Java是一个安全的编程语言,它能最大程度的防止程序员犯一些低级的错误(大部分是和内存管 ...

最新文章

  1. unix网络编程之简介
  2. 学习Windows2008——设计活动目录
  3. Swift JSON转模型Xcode插件
  4. Swift实现CoreData存储数据
  5. 传递list对象作为参数_24.scala的隐式参数
  6. devops 文化_需要建立DevOps文化
  7. python连续读取邮件_Python读取指定日期邮件的实例
  8. 将input file的选择的文件清空的两种解决方案
  9. Eclipse—在Eclipse中如何创建JavaWeb工程
  10. 软件工程需求分析阶段_正在进行的过程的7个阶段:需求工程
  11. c++ Dxgi+FFmpeg 完成对截图屏幕,以及将屏幕数据保存为MP4格式,以完成录屏功能
  12. Flutter——打包Windows桌面应用(流程)
  13. 赵小楼《天道》《遥远的救世主》深度解析(137) 职业的责任担当,活的认真
  14. 关于keras-yolov3-deepsort
  15. mysql chunk 函数_Laravel中的chunk组块结果集处理与注意问题
  16. 移动硬盘读不出来的问题
  17. 数独游戏技巧从入门到精通_从入门到精通八讲 | 高效氮化镓电源设计第六讲—EMC优化和整改技巧...
  18. vue 腾讯地图展示用户定位附近的门店
  19. 如何在拨号vps里查看本机ip地址
  20. 嘉宾专访|2020 PostgreSQL亚洲大会中文分论坛:韩国盛

热门文章

  1. PHP学习:字符串操作和正则表达式
  2. XCTF-高手进阶区:i-got-id-200
  3. Centos 7 搭建nginx 服务 使得别人能够访问自己的个人网站
  4. webscoket断线重连
  5. js删除数组中的某一个元素
  6. Boost正则表达式
  7. python字典嵌套实例
  8. java获取浏览器版本号
  9. linux命令学习记录一
  10. [CareerCup] 1.6 Rotate Image 翻转图像