C#用new和override来实现抽象类的重写区别
一,抽象的实现
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Virtualdemo
{
class Program
{
static void Main(string[] args)
{//BClass A = new BClass(); 抽象类无法被实例
Class1 c = new Class1();
BClass c2 = c;
c2.MethodA();
c.MethodA();
c2.MethodB();
c.MethodB();
c2.MethodC();
c.MethodC();
Console.ReadKey();
}
}
abstract class BClass //抽象类无法被实例
{
public virtual void MethodA() { Console.WriteLine("BClassA"); }
public virtual void MethodB() { Console.WriteLine("BClassB"); }
public virtual void MethodC() { Console.WriteLine("BClassC"); }
}
class Class1 : BClass
{
public void MethodA() { Console.WriteLine("MethodA"); }//如果一个虚函数 在子类中没有通过override关键字,那么这个方法就没有被重写,而是被隐藏了
public override void MethodB() { Console.WriteLine("MethodB"); }
public override void MethodC() { base.MethodC(); }
}
}
从上图得出的结果是:

综上:抽象类的虚方法需要被重写,那问题来了重写有两种方式,new和override又有什么区别
二,new和override重写的区别:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text; namespace Virtualdemo
{
class Program
{
static void Main(string[] args)
{
Teacher t = new Teacher();
Student stu = t;
stu.Exam();
stu.Say();
t.Say();
Console.ReadKey();
}
}
public abstract class Student
{
public virtual void Exam()
{
Console.WriteLine("学生都要考试");
}
public void Say()
{
Console.WriteLine("我是学生");
}
}
public class Teacher : Student
{
public override void Exam()
{
Console.WriteLine("老师不用考试");
}
//public override void Say() //报错,提示没有virtual,无法被重写
//{
// Console.WriteLine("我是老师");
//}
public new void Say()
{
Console.WriteLine("我是老师");
}
}
}
结果显示为:

综上总结:
1>如果基类没有定义虚方法,那子类只能使用new,而不能使用override
2>基类有没有定义虚方法,子类都可以使用new
3>子类使用new并不叫重写,而是子类新创建一个方法,只是新创建的这个方法刚好跟基类中的方法同名
C#用new和override来实现抽象类的重写区别的更多相关文章
- 方法的覆盖(override)、重载(overload)和重写(overwrite)
body { background-color: white } .markdown-body { min-width: 200px; max-width: 760px; margin: 0 auto ...
- java抽象类与接口区别
java抽象类与接口区别: abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstr ...
- ExtJs--16--Ext.override()方法专门用来重写对象的方法
Ext.onReady(function(){ /** * Ext.override()方法专门用来重写对象的方法 */ //定义个类 Ext.define("U",{ //该类的 ...
- Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类?
Java接口和抽象类有什么区别,哪些时候用接口,哪些时候用抽象类? 2013-01-05 17:16:09| 分类: JAVA | 标签:java |举报|字号 订阅 下面比较一下两者的 ...
- java中接口和抽象类有什么区别,举例!
2)接口和抽象类有什么区别?答:马克-to-win:抽象类里可以有实现的方法,接口里不能有,所以相对来讲各方面实现都简单(尤其动态方法调度).另外:类可以实现多个接口.反过来说,也正是抽象类一个致命伤 ...
- JAVA Override和Overload的含义去区别
java中的继承,方法覆盖(重写)override与方法的重载overload的区别 1.方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,重写(Overr ...
- C#中的抽象类与重写
今天的我们学习了好多,最初上午学习了文件流的方法,老师告诉我们是选修,可能以后不怎么用吧,但是还是想学下,似乎用个小程序读写文件很快地节奏,所以有点小兴趣学习,明天我再看看啦!今天之后学习了多态,继承 ...
- delphi override、overload、reintroduce的区别-0613.txt
http://blog.csdn.net/honglixx/article/details/3624934 1.override overload reintroduce的中文叫法是什么? overr ...
- java抽象类和接口区别
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- CentOS7 SSH 密码正确,但仍提示“Permission denied”
我看其他人解决办法,有的是防火墙端口,有的是sshd_config文件的密码登录,有的ip冲突等等,我都按照那些修改了,但是都不通,最后修改了这个,好用了. 看一下SElinux,敲sestatus, ...
- Java并发(具体实例)—— 构建高效且可伸缩的结果缓存
这个例子来自<Java并发编程实战>第五章.本文将开发一个高效且可伸缩的缓存,文章首先从最简单的HashMap开始构建,然后分析它的并发缺陷,并一步一步修复. hashMap版本 ...
- postcss-px-to-viewport 的 exclude 配置无效
原来是由于版本太低的缘故: postcss-px-to-viewport 0.0.3版本不支持 exclude属性. 更新到 1.1.0 配置: // 路径中包含 PC ,则忽略 px转换为vw,vh ...
- rem字体+百分比布局表格
效果图: 上源码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- java获取当月日期 和 周末
/** * java获取 当月所有的日期集合 * @return */public static List<Date> getDayListOfMonth() { List list = ...
- Apache Flink 的迁移之路,2 年处理效果提升 5 倍
一.背景与痛点 在 2017 年上半年以前,TalkingData 的 App Analytics 和 Game Analytics 两个产品,流式框架使用的是自研的 td-etl-framework ...
- Hadoop编程调用HDFS(PYTHON)
1.运行环境 开发工具:PyCharm Python 版本:3.5 Hadoop环境: Cloudera QuickStart 2.GITHUB地址 https://github.com/nbfujx ...
- vue使用中的问题总结
1.根实例问题 vue中的根实例可以有多个,每个根实例可以挂载DOM元素,只有在挂载的DOM元素上才可以使用该实例中的数据方法等. 并且,组件只有在某一个根实例所挂载的DOM元素上才可以使用. 2.组 ...
- 单词计数-MapReduceJob
pom文件 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3. ...
- 540D - Bad Luck Island(概率DP)
原题链接:http://codeforces.com/problemset/problem/540/D 题意:给你石头.剪刀.布的数量,它们之间的石头能干掉剪刀,剪刀能干掉布,布能干掉石头,问最后石头 ...