一. 覆盖/写

1. 关键字:new

2. 含义:子类继承父类中的普通方法,如果在子类中写了一个和父类中完全相同的方法,子类中会报警告(问是否显式的隐藏父类的中的方法),如果在子类中的方法前加上new关键字,则警告消失。

注意:

  * 虽然可以不使用 new 修饰符来隐藏成员,但将收到编译器警告。 如果使用 new 来显式隐藏成员,将禁止此警告。

  * 这里需要特别注意,隐藏父类方法是指声明的完全是子类实例,      eg child类继承parent类, 并在child类中重新声明了一个和parent中相同的方法show。

那么分两种情况:

  * a. child c=new child(); c.show()进行调用,无论child类中的show方法前加没加new关键字,调用的都是child类中的方法,只是加上new关键字后,不出警告。

  * b. parent p=new child(); p.show()进行调用,无论child类中的show方法前加没加new关键字,调用的都是parent类中的方法,因为这是不同方法,不涉及override,不满足上述声明的new关键字替换父类中的方法的描述。

3. 声明一个parentClass父类,里面有三个方法。

   public abstract class parentClass
{
//下面两个普通方法实现自身的重载
public void CommonMethord1()
{
Console.WriteLine("parentClass CommonMethord1");
}
public void CommonMethord1(string msg)
{
Console.WriteLine("parentClass CommonMethord1");
}
public void CommonMethord2()
{
Console.WriteLine("parentClass CommonMethord2");
}
}

4. 声明一个childClass类,里面重写了两个方法。

  public class childClass : parentClass
{
/// <summary>
/// 单独声明子类实例的时候,将替换父类中的方法
/// </summary>
public void CommonMethord1()
{
Console.WriteLine("childClass CommonMethord1");
}
/// <summary>
/// new 关键字去除上述警告,单独声明子类实例的时候,将替换父类中的方法
/// </summary>
/// <param name="msg"></param>
public new void CommonMethord1(string msg)
{
Console.WriteLine("childClass CommonMethord1");
}
}

5. 调用

  {
parentClass p1 = new childClass();
childClass p2 = new childClass();
Console.WriteLine("-----------------------------1.子类的直接调用--------------------------------------");
p2.CommonMethord1(); //结果:子类方法 (非显式隐藏,但也隐藏了,会报警告)
p2.CommonMethord1("ddd"); //结果:子类方法 (含有new关键字,显式的隐藏了父类中的方法,没有警告)
p2.CommonMethord2(); //结果:父类方法 Console.WriteLine("-----------------------------2.普通方法重写,调用的都是父类方法--------------------------------------");
p1.CommonMethord1(); //结果:父类方法
p1.CommonMethord1("ddd"); //结果:父类方法
p1.CommonMethord2(); //结果:父类方法
}

二. 重写

1. 关键字:override

2. 含义:在子类中,继承的父类中的抽象方法(abstract)和虚方法(virtual),子类可以对其进行重写,其中父类中的抽象方法,子类中必须被重写。

 抽象方法:没有方法体,子类必须重写。

 虚方法:必须有方法体,子类可以对其进行重写,也可以不进行重写。

3. 新建一个名叫parentClass的抽象类,里面有一个抽象方法和两个虚方法。

    public abstract class parentClass
{
//下面为抽象方法
public abstract void abstractMethord();
//下面两个方法为虚方法
public virtual void virtualMethord1()
{
Console.WriteLine("parentClass virtualMethord1");
}
public virtual void virtualMethord2()
{
Console.WriteLine("parentClass virtualMethord2");
}
}

4. 新建一个childClass子类,继承parentClass类,并且对virtualMethord2虚方法进行重写

   public class childClass : parentClass
{ public override void abstractMethord()
{
Console.WriteLine("childClass abstractMethord");
}
//加上sealed关键字,子类将不能对其继续进行重写
public sealed override void virtualMethord2()
{
Console.WriteLine("childClass virtualMethord2");
}
}

5. 调用 (总结:子类有的方法,都是调用子类方法)

           parentClass p1 = new childClass();
childClass p2 = new childClass();
Console.WriteLine("-----------------------------1.子类的直接调用--------------------------------------");
p2.abstractMethord(); //结果:子类方法
p2.virtualMethord1(); //结果:父类方法
p2.virtualMethord2(); //结果:子类方法
Console.WriteLine("-----------------------------2.抽象类(符合里氏替换原则)的形式调用--------------------------------------");
p1.abstractMethord(); //结果:子类方法
p1.virtualMethord1(); //结果:父类方法
p1.virtualMethord2(); //结果:子类方法

三. 重载(overload)

1. 关键字:无关键字

2. 含义:在同一个类中,同一个名称的方法参数的个数不同、参数类型不同、参数个数和参数类型都不同

eg: parentClass中的CommonMethord1的两个方法就是重载

!

  • 作       者 : Yaopengfei(姚鹏飞)
  • 博客地址 : http://www.cnblogs.com/yaopengfei/
  • 声     明1 : 本人才疏学浅,用郭德纲的话说“我是一个小学生”,如有错误,欢迎讨论,请勿谩骂^_^。
  • 声     明2 : 原创博客请在转载时保留原文链接或在文章开头加上本人博客地址,否则保留追究法律责任的权利。

第二节:重写(new)、覆写(overwrite)、和重载(overload)的更多相关文章

  1. java 关于 重写、覆写、覆盖、重载 的总结【不想再傻傻分不清了】

    1.前言 有些东西,名称不同,其实就是一个东西,你说是扯淡不? 2.重写 重写,又叫覆写.覆盖 ,注解@Override,词义为推翻 , 用法特点是继承父类后,重写的父类方法名字.参数.返回值必须相同 ...

  2. JAVA基础--方法的重写overwrite 和 重载overload

    重写 overwrite或者override: 相同的方法名称, 参数列表和返回类型 重载overload: 方法有相同的名字, 但是参数不同 (参数个数不同, 参数类型不同, 其中一个不同即可), ...

  3. 【Java 小实验】重写(覆写 Override)返回值类型能不能相同

    背景 每次看到重写那里写着: 重写机制是指子类的方法的方法名.参数表.返回值与父类中被重写的方法都相同,而方法体不同. 而重载是: 方法名与父类中的相同,而参数表不同,则属于同名方法的重载. 本来的感 ...

  4. 第二节,mnist手写字体识别

    1.获取mnist数据集,得到正确的数据格式 mnist = input_data.read_data_sets('MNIST_data',one_hot=True) 2.定义网络大小:图片的大小是2 ...

  5. 重写(overwrite)、重载(overload)和覆盖(override)三者之间的区别

    覆盖:子类继承了父类的同名无参函数.当子类从父类继承了一个无参函数,而又定义了一个同样的无参函数,则子类定义的方法覆盖父类的方法,称为覆盖. 重载:子类继承了父类的同名有参函数.当子类继承了父类的一个 ...

  6. 第一节:重写(new)、覆写(overwrite)、和重载(overload)

    一丶重写<NEW> 子类重写父类方法,方法里加new, eg: public new void CommonMethord1(string msg){} 子类继承父类中的普通方法,如果在子 ...

  7. [你必须知道的.NET]第十七回:貌合神离:覆写和重载

    本文将介绍以下内容: 什么是覆写,什么是重载 覆写与重载的区别 覆写与重载在多态特性中的应用 1. 引言 覆写(override)与重载(overload),是成就.NET面向对象多态特性的基本技术之 ...

  8. C++中overload(重载),override(覆盖),overwrite(重写/覆写)的区别

    #include <cstdio> #include <cstdlib> class Base { public: #pragma region MyRegion1 //函数重 ...

  9. JAVA中继承时方法的重载(overload)与重写/覆写(override)

    JAVA继承时方法的重载(overload)与重写/覆写(override) 重载-Override 函数的方法参数个数或类型不一致,称为方法的重载. 从含义上说,只要求参数的个数或参数的类型不一致就 ...

  10. 菜鸡的Java笔记 第二十 - java 方法的覆写

    1.方法的覆写    当子类定义了与父类中的完全一样的方法时(方法名称,参数类型以及个数,返回值类型)这样的操作就称为方法的覆写    范例:观察方法的覆写 class A{ public void ...

随机推荐

  1. WebRtc编译好的vs2015源码

    一直想看webrtc的源码,苦于FQ能力有限且整个编译过程耗时巨大,故求助于互联网.在互联网寻找许久编译好的Webrtc源码,好多版本下载下来总是报各种错误,很是失落. 皇天不负有心人,终于寻得一版可 ...

  2. 面向对象___str__和__repr__

    老师的博客关于此知识点 http://www.cnblogs.com/Eva-J/articles/7351812.html#_label7 __str__和__repr__ 改变对象的字符串显示__ ...

  3. 在Centos7.2(64位)下搭建Web服务器

    一:通过Yum安装mysql 1 # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm 2 # rpm -i ...

  4. 初始数据结构(python语言)

    数据结构 概念:数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 算法复杂度 时间复杂度 时间复杂度是同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法 ...

  5. P1546 最短网络 Agri-Net题解(克鲁斯卡尔)

    P1546 最短网络 Agri-Net 那么这个题是一道最小生成树的板子题 在此讲解kruskal克鲁斯卡尔方法: 原理: 并查集在这里被用到: 众所周知:树满足这样一个定理:如果 图 中有n个节点并 ...

  6. 学习笔记《Mustache》模板

    Mustache 是一款经典的前端模板引擎,在前后端分离的技术架构下面,前端模板引擎是一种可以被考虑的技术选型,随着重型框架(AngularJS.ReactJS.Vue)的流行,前端的模板技术已经成为 ...

  7. lombook安装以及在eclipse和idea上配置

    一.安装 a.官网上的安装方法 1.点击Download! 2.点击确认下载 3.下载完成,双击打开,点击“open”即可 4.之后会自动找到你的IDE如Eclipse,点击“install/upda ...

  8. 第十一节,利用yolov3训练自己的数据集

    1.环境配置 tensorflow1.12.0 Opencv3.4.2 keras pycharm 2.配置yolov3 下载yolov3代码:https://github.com/qqwweee/k ...

  9. iOS开发基础-九宫格坐标(1)

    一.功能分析 1)以九宫格展示图片信息,每一个 UIView 包含一个 UIImageView .一个 UILabel 和一个 UIButton . 2)加载App数据,根据数据长度创建对应的格子数: ...

  10. vue webpack打包

    webpack构建流程 从启动webpack构建到输出结果经历了一系列过程,它们是: 解析webpack配置参数,合并从shell传入和webpack.config.js文件里配置的参数,生产最后的配 ...