第二节:重写(new)、覆写(overwrite)、和重载(overload)

一. 重写

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父类,里面有三个方法。

复制代码

 1   public abstract class parentClass2     {3         //下面两个普通方法实现自身的重载4         public void CommonMethord1()5         {6             Console.WriteLine("parentClass CommonMethord1");7         }8         public void CommonMethord1(string msg)9         {
10             Console.WriteLine("parentClass CommonMethord1");
11         }
12         public void CommonMethord2()
13         {
14             Console.WriteLine("parentClass CommonMethord2");
15         }
16     }

复制代码

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

复制代码

 1  public class childClass : parentClass2     {3         /// <summary>4         /// 单独声明子类实例的时候,将替换父类中的方法5         /// </summary>6         public void CommonMethord1()7         {8             Console.WriteLine("childClass CommonMethord1");9         }
10         /// <summary>
11         /// new 关键字去除上述警告,单独声明子类实例的时候,将替换父类中的方法
12         /// </summary>
13         /// <param name="msg"></param>
14         public new void CommonMethord1(string msg)
15         {
16             Console.WriteLine("childClass CommonMethord1");
17         }
18     }

复制代码

5. 调用

复制代码

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

复制代码

二. 覆写

1. 关键字:override

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

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

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

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

复制代码

 1    public abstract class parentClass2     {3         //下面为抽象方法4         public abstract void abstractMethord();5         //下面两个方法为虚方法6         public virtual void virtualMethord1()7         {8             Console.WriteLine("parentClass virtualMethord1");9         }
10         public virtual void virtualMethord2()
11         {
12             Console.WriteLine("parentClass virtualMethord2");
13         }
14     }

复制代码

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

复制代码

 1   public class childClass : parentClass2     {3 4         public override void abstractMethord()5         {6             Console.WriteLine("childClass abstractMethord");7         }8         //加上sealed关键字,子类将不能对其继续进行覆写9         public sealed override void virtualMethord2()
10         {
11             Console.WriteLine("childClass virtualMethord2");
12         }
13     }

复制代码

5. 调用

复制代码

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

复制代码

三. 重载(overload)

1. 关键字:无关键字

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438598.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 分页查询_JavaWeb之分页查询

时间&#xff1a;2016-12-11 01:411、分页的优点&#xff1a;只查询一页&#xff0c;不需要查询所有数据&#xff0c;能够提高效率。2、分页数据页面的数据都是由Servlet传递的* 当前页&#xff1a;pageCode> 如果页面没有向Servlet传递页码&#xff0c;那么Servlet默认…

第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字

一. 各类数据结构比较及其线程安全问题 1. Array(数组)&#xff1a; 分配在连续内存中,不能随意扩展&#xff0c;数组中数值类型必须是一致的。数组的声明有两种形式&#xff1a;直接定义长度&#xff0c;然后赋值&#xff1b;直接赋值。 缺点&#xff1a;插入数据慢。 优点&a…

java万法_Java I/O库的设计分析

Java采用了流的机制来实现输入&#xff0f;输出。所谓流&#xff0c;就是数据的有序排列。而流可以是从某个源(称为流源或Source of Stream)出来&#xff0c;到某个目的地(称为流汇或Sink of Stream)去的。由流的方向&#xff0c;可以分成输入流和输出流。一个程序从输入流读取…

第四节:IO、序列化和反序列化、加密解密技术

一. IO读写   这里主要包括文件的读、写、移动、复制、删除、文件夹的创建、文件夹的删除等常规操作。 注意&#xff1a;这里需要特别注意&#xff0c;对于普通的控制台程序和Web程序&#xff0c;将"相对路径"转换成"绝对路径"的方法不一致。 (1). 在w…

java mediator_java—mediator中介模式

中介者模式是由GoF提出的23种软件设计模式的一种。Mediator模式是行为模式之一&#xff0c;Mediator模式定义:用一个中介者对象来封装一系列的对象交互。中介者使各对象不需要显式的相互引用&#xff0c;从而使其耦合松散&#xff0c;而且可以独立的改变他们之间的交互。适用性…

第五节:泛型(泛型类、接口、方法、委托、泛型约束、泛型缓存、逆变和协变)

一. 泛型诞生的背景 在介绍背景之前&#xff0c;先来看一个案例&#xff0c;要求&#xff1a;分别输出实体model1、model2、model3的id和name值,这三个实体有相同的属性名字id和name。 1 public class myUtils2 {3 //要求&#xff1a;分别输出实体model1、model2、…

第六节:反射(几种写法、好处和弊端、利用反射实现IOC)

一. 加载dll,读取相关信息 1. 加载程序集的三种方式 调用Assembly类下的三个方法&#xff1a;Load、LoadFile、LoadFrom。 1       //1.1 Load方法&#xff1a;动态默认加载当前路径下的(bin)下的dll文件,不需要后缀 2 Assembly assembly Assembly.Load(&…

第七节:语法总结(1)(自动属性、out参数、对象初始化器、var和dynamic等)

一. 语法糖简介 语法糖也译为糖衣语法&#xff0c;是由英国计算机科学家彼得约翰兰达&#xff08;Peter J. Landin&#xff09;发明的一个术语&#xff0c;指计算机语言中添加的某种语法&#xff0c;这种语法对语言的功能并没有影响&#xff0c;但是更方便程序员使用。通常来说…

java不用插件播放媒体文件_java servlet不用插件上传文件:

展开全部import java.net.*;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class SaveFileServlet extends HttpServlet{FileWriter savefile;String filename null;String value null;/*** Handles a POST request*/publ…

第八节:语法总结(2)(匿名类、匿名方法、扩展方法)

一. 匿名类 1. 传统的方式给类赋值&#xff0c;需要先建一个实体类→实例化→赋值&#xff0c;步骤很繁琐&#xff0c;在.Net 3.0时代&#xff0c;微软引入匿名类的概念&#xff0c;简化了代码编写&#xff0c;提高了开发效率。 匿名类的声明语法&#xff1a; var objnew {字段…

java 里面matches什么意思_Java Regex中的matches()和find()之间的区别

如果完整string匹配&#xff0c; matches()将只返回true。 find()会尝试find匹配正则expression式的子string中的下一个匹配项。 注意强调“下一个”。 这意味着&#xff0c;多次调用find()的结果可能不一样。 另外&#xff0c;通过使用find()你可以调用start()来返回子string匹…

第九节:委托和事件(1)(委托的发展历史、插件式编程、多播委托)

一. 委托的发展历史和基本用法 说起委托&#xff0c;每个人可能都会对他有不同的理解&#xff0c;结合实战中委托的使用&#xff0c;我对其理解是&#xff1a;委托和类一样&#xff0c;是用户的一个自定义类型&#xff0c;委托可以有参数、有返回值&#xff0c;委托的关键字是d…

java为什么不使用odbc_java jdbc和odbc的区别是什么?jdbc和odbc的关系是怎样的?

对于jdbc和odbc你都了解多少呢?今天要给大家讲到的就是jdbc和odbc之间的内容&#xff0c;一起来了解一下jdbc和odbc的区别以及关系是怎样的吧!下面先来给大家介绍一下jdbc和odbc之间的区别。总的来说&#xff0c;jdbc和odbc的区别可以划分成三大部分&#xff0c;一起来看看。一…

第十节:委托和事件(2)(泛型委托、Func和Action、事件及与委托的比较)

一. 泛型委托 所谓的泛型委托&#xff0c;即自定义委托的参数可以用泛型约束&#xff0c;同时内置委托Func和Action本身就是泛型委托。 将上一个章节中的Calculator类中的方法用自定义泛型委托重新实现一下。 1 public class Calculator22 {3 //传统解决方案一&am…

java中sql之count_按SQL Server中的count()子句分组

我正在尝试编写一个SQL查询&#xff0c;它将返回聚合值列表;但是&#xff0c;我想通过其中一个聚合值(计数)对查询进行分组&#xff1a;select t.Field1, count(distinct(t.Field2), SUM(t.Value1)from MyTable tgroup by t.Field1, count(t.Field2)我已经尝试将计数放入子查询…

java+sm4+加密算法_SM4加密算法实现Java和C#相互加密解密

https://www.cnblogs.com/miaoziblog/p/9040473.html近期由于项目需要使用SM4对数据进行加密&#xff0c;然后传给Java后台&#xff0c;Java后台使用的也是SM4的加密算法但是就是解密不正确&#xff0c;经过一步步调试发现Java中好多数据类型与C#的相同的数据类型是存在不同的比…

用java设计节拍器_具有高速的Java节拍器

关于Thread.sleep()不可靠的答案是正确的&#xff1a;你不能指望它完全返回你指定的时间.事实上,我很惊讶你的节拍器可以使用,特别是当你的系统负载不足时.阅读Thread.sleep()的文档以获取更多详细信息.关于MIDI的Max Beikirch的答案是一个很好的建议&#xff1a;MIDI处理时机非…

java隐藏密钥_java – 在Android中隐藏密钥库密码的最佳方法是什么?

我是Android开发和实现SSLSockets的新手.在做了一些挖掘后,我能够设置一个正常工作的简单服务器/客户端.我认为实现可以使用一些工作,并且难以将密码加载到密钥库而不用纯文本.这是客户端的一些代码.如您所见,我将密码硬编码到本地var中.是否有更好的方法加载密钥库密码,所以我…

DotNet进阶系列

一. 回顾历史 回顾个人发展历程&#xff0c;自2012年初次接触开发至今(2018年)已经有六个年头&#xff0c;这期间陆陆续续学习并掌握了不少技术&#xff0c;C#语言、ORM框架、多线程技术、设计模式、前端技术、MVC、MVVM框架思想等等&#xff0c;每种技术随着多次使用&#xff…

美团科技 Java工程师_美团Java工程师面试题(2018秋招)

第一次面试1.小数是怎么存的2.算法题&#xff1a;N二进制有多少个13.Linux命令(不熟悉4.JVM垃圾回收算法5.C或者伪代码实现复制算法6.volatile7.树的先序中序后序以及应用场景8.Mysql存储记录的数据结构9.索引数据结构10.为什么不用AVL和红黑树存&#xff1f;11.说实习项目12.r…