《编程导论(Java)·2.1.3改写(override)》,收集override内容.


方法改写(method overriding)是指对于父类定义的一个实例方法,同意子类提供自己的实现的一种语言特性。子类的实现将改写(override)或代替(replace)父类中的实现。

改写成功必须“同一时候”满足下列条件。

  • 两者的方法签名全然同样。

方法签名(signature)指一个方法的名字和形參列表。a method's signature is its name and the number and the type of its arguments.。而重载方法的方法签名必须不同。本质上。签名不同的方法,是两个不同的方法。

  • 返回类型必须同样或是子类。Java 5.0之前。返回类型不同将导致编译错误。Java 5.0之后,改写方法的返回类型能够是(被改写方法的返回类型的)子类。

    covariant return type

  • 方法改写时,訪问权限不能变得更加私有。不要求两者訪问修饰符同样,但假设父类的方法是包私有的,则改写的方法能够用包私有的、protected和public修饰。假设父类的方法是public,则改写的方法仅仅能用public修饰。
  • 改写的方法,不能抛出比父类方法很多其它的检查型异常
public interface Sup{
public void copy();
}
class Sub implements Sup{
@Override public void copy(){
System.out.println("override");
throw new NullPointerException();
}
}

编译器无论RuntimeException。

  • 父类的方法不是final方法。final方法不可以被改写。
  • 父类的方法不是private或static方法。否则,即使编写了签名全然同样的方法。可是它们与改写机制无关

父类的private方法。子类不继承。因而对子类而言毫无意义,如同不存在。

父类的static方法foo(),假设可以继承。子类可以依照改写的要求如訪问权限更公有、返回值类型同样等,编写方法签名同样的静态方法。可是。前面不可以加@Override。

两者并列存在。方法隐藏:在子类中直接调用foo(),则运行自定义的静态方法。假设没有自定义的foo()——仅仅有一个继承于父类的static方法foo(),在子类中直接调用foo(),显然运行唯一的foo()。

所以。自定义的静态方法挡住了父类的方法。

在能够继承的前提下:

父类的实例方法。子类能够override一个实例方法,可是子类不得定义签名同样的static方法-编译错误。

父类的静态方法,子类能够编写隐藏性的静态方法,可是子类不得定义签名同样的实例方法-编译错误。

overriding与overloading

如同比較男生和女生。改写是执行时机制,而重载是编译时机制。仅仅有读源码时才有比較的价值,刻薄地说,仅仅有考试时才有比較的价值。

《编程导论(Java)·2.1.3改写(override)》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Spring 配置XML文件头部文件格式

    普通格式: <?xml version="1.0" encoding="UTF-8" ?> <beans xmlns:xsi="ht ...

  2. Java中对List集合的排序

    方法一: 第一种方法,就是list中对象实现Comparable接口,代码如下: 实体类: public class Person implements Comparable<Person> ...

  3. ruby 线程学习

    i=1 Thread.start{ while true print "Thread 1 \n" i+=1 if i==5 then Thread.kill Thread.curr ...

  4. BrnShop开源网上商城第六讲:扩展视图功能

    在正式讲解扩展视图功能以前,我们有必要把视图的工作原理简单说明下.任何一个视图都会被翻译成一个c#类,并保存到指定的位置,然后被编译.这也就是为什么能在视图中包含c#代码片段的原因.下面我们通过一个项 ...

  5. Android Support v4、v7、v13的区别和应用场景

    N久未做android了,以前做的时候,2.2才刚出来,现在android都更新到了4.3了,而从前一段时间android各个sdk版本市场占有率 来看,1.6.2.1还是占有一定的市场,故在有些时候 ...

  6. Java笔记(七)……函数

    函数的定义 定义在类中具有特定功能的一段独立小程序,也称方法. 函数的格式 1: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,) 2: { 3: 执行语句; 4: retu ...

  7. maven,spring,mybatis集成错误

    maven,spring,mybatis集成的时候单元测试junit测试没问题,但mvn jetty:run 就报错误 错误: org.apache.ibatis.binding.BindingExc ...

  8. 基础 HTML之目录问题(相对路径和绝对路径区别)

    一.相对路径和绝对路径 相对路径:以引用文件之网页所在位置为参考基础,而建立出的目录路径.因此,当保存于不同目录的网页引用同一个文件时,所使用的路径将不相同,故称之为相对. 绝对路径:以Web站点根目 ...

  9. HW3.2

    import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...

  10. HDOJ-ACM1003(JAVA)

    转载声明:原文转自http://www.cnblogs.com/xiezie/p/5502855.html 第一.二次的思路都是穷举: 第一次的实现是用二维数组: import java.util.* ...