《编程导论(Java)·2.1.3改写(override)》
《编程导论(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)》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- MSSQL版本
(1)661是sql2008 R2的版本号 Microsoft SQL Server 2008 R2 (RTM) - 10.50.1600.1 (Intel X86) Apr 2 201 ...
- 【Linux安全】查看是否存在特权用户以及是否存在空口令用户
查看是否存在特权用户 通过判断uid是否为0来查找系统是否存在特权用户,使用命令awk即可查出. [root@pentester ~]# awk -F: '$3==0 {print $1}' /etc ...
- NuGet学习笔记(1)——初识NuGet及快速安装使用
关于NuGet园子里已经有不少介绍及使用经验,本文仅作为自己研究学习NuGet一个记录. 初次认识NuGet是在去年把项目升级为MVC3的时候,当时看到工具菜单多一项Library Package M ...
- 【HDOJ】3337 Guess the number
神一样的题目.简言之,利用手段获得测试用例的第一行,输出结果.很显然利用wa, TLE, OLE等judge status可以获得测试用例.因此,果断Python写一个acm提交机器人.依赖lxml库 ...
- Java SE知识点
Java概述 Java的运行机制 JDK,JRE,JVM Java开发环境搭建 用记事本编写运行一个Hello World的完整过程 如何在Java中使用注释 使用Eclipse开发Java程序 使用 ...
- IIS由于无法创建应用程序域,因此未能执行请求。错误: 0x80070005 拒绝访问
网站静态页面(.html)是可以访问的,但是动态页面(.aspx)就出错了. 服务器上还有其他网站,但是都可以正常浏览,这就说明不是IIS本身有问题了,问题应该出在网站本身. 百度后,都说是权限问题, ...
- MySQL for Excel用法
MySQL有一款工具“MySQL for Excel”它可以提供将Excel的数据导入MySQL,或者将MySQL的数据导出到Excel的功能.简而言之,使用MySQL for Excel可以通过Ex ...
- hadoop面试时可能遇到的问题
面试hadoop可能被问到的问题,你能回答出几个 ? 1.hadoop运行的原理? 2.mapreduce的原理? 3.HDFS存储的机制? 4.举一个简单的例子说明mapreduce是怎么来运行的 ...
- MFC框架
第一点:类别型录网的搭建: 类别型录网搭建的目的是为了实现所谓的"执行期类型识别",也就是在程序运行的时候识别出某个对象是否是某个类的实例(基类也可以).这里还不是很明白为什么需要 ...
- iphone4s丢失如何找回
iphone4s丢失如何找回 iphone4s手机丢了怎么办,其实苹果手机自带找回功能,但是前提你得打开了icloud这款软件. 方法/步骤 1 在手机的设置里找到icloud设置,如图. 2 点击进 ...