方法重写

什么是方法重写?

方法重写指的是当子类和父类出现了一摸一样的方法声明

方法重写有什么用?

当父类中有一个方法时,子类会继承,但是子类并不一定能够用到,或者说继承过来的方法不满足使用,需要重新写方法体,但是仅限于方法体的修改。

案例:手机拥有打电话的功能,智能手机拥有视频通话的功能。

class Phone{
public void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{ } public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}
//输出结果
电话拨通中

SmartPhone类中是不含有call的方法的,但是因为其父类Phone含有该方法,所以可以引用call方法;

但是作为智能手机不应该只有call的方法,所以我们要将其从父类中继承过来的方法进行重写来加入新的功能;这就是方法重写的意义所在。

class Phone{
public void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{
@override //@override 是具有检测功能的注解,检测下方的方法是否为方法重写
public void call(){//方法重写必须与父类的返回值类型,方法名,形参一致
System.out.println("视频通话已开启");//我们加入了新的输出语句
System.out.println("电话拨通中");//这里我们应该简化语句写出:super.call();
}
} public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}
//输出结果
视频通话已开启
电话拨通中

方法重写的注意细节

现在我们已经了解方法重写的意义,方法重写中还有一些细节需要我们注意;

我们发现不管是父类的还是子类方法前面有时候会加上publicprivate等等词语;

我们将加在前面的这些词语称为访问权限修饰符;他们的等级为:public>protected>private

class Phone{
//在父类中设置一个默认权限的方法(没有加修饰符就代表默认)
void call(){
System.out.println("电话拨通中");
}
}
class SmartPhone extends Phone{
@override
//子类重写父类方法时访问权限必须高于或等于父类的访问权限
void call(){
//此时可以加的修饰词为:public、protected
System.out.println("视频通话已开启");
super.call();
}
} public class Application{
public static void main(String[] args){
SmartPhone sp=new SmartPhone();
sp.call();
}
}

总结:

  • 重写是发生在继承的基础上
  • 重写是针对方法而言的
  • 子类方法重写时,方法的声明一定要与父类的方法声明保持一致
  • 父类的私有方法子类不能继承和进行重写
  • 子类对父类方法进行重写时,访问权限修饰符的等级一定不可小于父类方法的访问权限修饰符等级
  • public>protected>private

Day21:方法重写以及注意细节的更多相关文章

  1. Java面向对象之继承,方法重写,super关键字,员工类系列继承题

    在程序中,如果想声明一个类继承另一个类,需要使用extends关键字. 格式: class 子类 extends 父类 {} 继承的好处 1.继承的出现提高了代码的复用性,提高软件开发效率. 2.继承 ...

  2. 【java开发】方法重写和方法重载概述

    类的继承   父类-子类 关键字 extends 新建一个父类 public class Person {     private String name;          private int ...

  3. 学习ASP.NET Web API框架揭秘之“HTTP方法重写”

    最近在看老A的<ASP.NET Web API 框架揭秘>,这本书对于本人现阶段来说还是比较合适的(对于调用已经较为熟悉,用其开发过项目,但未深入理解过很多内容为何可以这样“调用”).看到 ...

  4. 方法重写和方法重载;this关键字和super关键字

    1:方法重写和方法重载的区别?方法重载能改变返回值类型吗? 方法重写: 在子类中,出现和父类中一模一样的方法声明的现象. 方法重载: 同一个类中,出现的方法名相同,参数列表不同的现象. 方法重载能改变 ...

  5. 疯狂java学习笔记之面向对象(六) - 构造器重载、方法重载和方法重写

    一.方法重载(Overload): Java允许同一个类中定义多个同名方法,只要形参不一样就可以,如果同一个类中包含了两个或两个以上方法名相同的方法,但形参列表不同,则被成为方法重载(两同一异). 同 ...

  6. 用HashSet的add方法谈hashcode和equals方法重写

    本文主要通过用HashSet的add方法讲一下hashCode和equals方法重写.错误的地方望指正. 1.了解HashSet的add方法 了解一个方法的好办法是看源码,所以先看源码 private ...

  7. Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖

    Java中只有非私有的实例方法能被重写,即实现多态,子类可以覆盖父类的方法,但是实例变量不能覆盖,若子类和父类均定义了同样名称的变量,则对于子类来说这是两个不同的变量,要想调用父类的变量必须显示去调用 ...

  8. Objective-c 类的继承 方法重写 方法重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. Obje ...

  9. C++学习笔记24,方法重写与方法隐藏

    该博文仅用于交流学习.请慎用于不论什么商业用途.本博主保留对该博文的一切权利. 博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 方法重写.是指在子类中又一 ...

  10. java方法重写和super关键字

    //java方法重写和super关键字 //在继承中,其实就是子类定义了和父类同名的方法 //就是方法,属性都是相通的 //重写限制: //被子类重写的方法不能拥有比父类方法更加严格的权限 //sup ...

随机推荐

  1. [Qt基础内容-08] Qt中MVC的M(Model)

    Qt中MVC的M(Model)简单介绍 Qt有自己的MVC框架,分别是model(模型).view(视图).delegate(委托),这篇文章,简单的介绍以下Qt中有关model(模型)的类以及一些基 ...

  2. 3、StringBuffer类

    StringBuffer类 java.lang.StringBuffer代表可变的字符序列,可以对字符串内容进行增删 很多方法与String相同,但StringBuffer是可变长度的 StringB ...

  3. Kubernetes DevOps: Jenkins

    提到基于 Kubernete 的CI/CD,可以使用的工具有很多,比如 Jenkins.Gitlab CI 以及新兴的 drone 之类的,我们这里会使用大家最为熟悉的 Jenkins 来做 CI/C ...

  4. Elasticsearch:IK中文分词器

    Elasticsearch内置的分词器对中文不友好,只会一个字一个字的分,无法形成词语,比如: POST /_analyze { "text": "我爱北京天安门&quo ...

  5. Elasticsearch之集群角色类型

    角色划分 在Elasticsearch中,有很多角色,常用的角色有如下: Master Node:主节点 Master eligible nodes:合格节点 Data Node:数据节点 Coord ...

  6. 存储卷PersistentVolume

    概述 与管理计算资源相比,管理存储资源是一个完全不同的问题.为了更好的管理存储,Kubernetes 引入了 PersistentVolume 和 PersistentVolumeClaim 两个概念 ...

  7. 18. Fluentd输出插件:out_stdout用法详解

    stdout即标准输出,out_stdout将收到的日志事件打印到标准输出. 如果Fluentd以daemon方式在后台运行,out_stdout会将事件输出到Fluentd的运行日志中. 这个插件在 ...

  8. 【JAVA】普通IO数据拷贝次数的问题探讨

    最近看到网上有些文章在讨论JAVA中普通文件IO读/写的时候经过了几次数据拷贝,如果从系统调用开始分析,以读取文件为例,数据的读取过程如下(以缓存I/O为例): 应用程序调用read函数发起系统调用, ...

  9. 【C++】从零开始的CS:GO逆向分析1——寻找偏移与基址的方法

    [C++]从零开始的CS:GO逆向分析1--寻找偏移与基址的方法   前言:此文章主要用于提供方法与思路,fps游戏基本都能如此找偏移,文章里找的偏移比较少,主要用来演示寻找思路,文章的后记中会附一个 ...

  10. 前端三件套 HTML+CSS+JS基础知识内容笔记

    HTML基础 目录 HTML基础 HTML5标签 doctype 标签 html标签 head标签 meta标签 title标签 body标签 文本和超链接标签 标题标签 段落标签 换行标签 水平标签 ...