一直都没仔细研究c#重写,new关键字的作用,最近在回头看书,复习C#基础的时候才发现了 C# 重写和 JAVA大不一样的地方。

C#

提供特定实现的子类可以重写(override)标识为 virtual 的函数、方法、属性、索引器和事件都可以声明为 virtual

class Program
{
class Fa
{
public string Get1()
{
return "Fa1";
}
public virtual string Get2()
{
return "Fa2";
}
public string Get3()
{
return "Fa3";
}
}
class C : Fa
{
public string Get1() {
return "C1";
}
public override string Get2()
{
return "C2";
}
public new string Get3()
{
return "C3";
}
}
static void Main(string[] args)
{
Fa f = new C();
Console.WriteLine(f.Get1()); // Fa1,原因Get1()方法并没有形成重写,调用A的Get1()方法
Console.WriteLine(f.Get2()); // C2,原因Get2()方法形成了重写,会调用B的方法
Console.WriteLine(f.Get3()); // Fa3,原因Get3()方法并没有形成重写,调用A的Get1()方法
}
}

运行结果

在Class C 的 Get1 方法上会出现黄色warning:隐藏继承的成员“Program.Fa.Get1()”。如果是有意隐藏,请使用关键字 new

这是因为C#可以用new关键字隐藏父类的同名方法,按照我的理解是,声明这是一个新的方法,切断其与父方法的联系。

而JAVA则不存在这个概念,Java书中写的是继承的时候会用到覆盖来形容子类重写父类函数。

C#中重写必须在父方法上使用abstract,virtual关键字,在子方法使用override关键字修饰。否则编译器则会视为不同的方法

Java

public class  Fa{
public string Get(){
return "Fa";
}
}
public class C extends A{
public string Get(){
return "A";
}
}
public static void main(string[] args){
Fa f = new C();
System.out;.println(f.Get1()); // A, Get1()方法自动被子类重写覆盖
}

【C# .Net】继承重写父类方法,C# 与 JAVA的不同之处的更多相关文章

  1. C# 继承实现父类方法、重写、重载

    继承是派生类(子类)去实现(重写<override>.重构<new>)基类(父类)的方法或属性.从而获取在派生类中要实现的功能. 子类调用父类构造方法,在父类中有个实现姓名和年 ...

  2. 134-PHP子类重写父类方法,并调用父类方法

    <?php class father{ //定义father类 public function method(){ //定义方法 echo '<br />father method' ...

  3. 【mac IntelliJ Idea】mac上 idea快速重写父类方法 快捷键

    windows上快捷键: Ctrl+O Mac上快捷键: command+O 在要重写父类方法的位置 ,按下快捷键,然后选择要重写的方法即可.

  4. Java子类重写父类方法注意问题收集(转)

    子类不能重写父类的静态方法,私有方法.即使你看到子类中存在貌似是重写的父类的静态方法或者私有方法,编译是没有问题的,但那其实是你重新又定义的方法,不是重写.具体有关重写父类方法的规则如下: 重写规则之 ...

  5. [UE4]蓝图继承方法:重写父类方法时,增加父类方法调用

    包括构造函数也可以调用父类方法 事件也可以调用父级的事件

  6. python学习笔记(二十五)重写父类方法

    python继承中,如果子类在调用某个方法时,它首先是从派生类(也就是当前类)中去找对应的方法,如果当前类中找不到对应的方法,就会去基类(派生类)中去逐个查找. 若父类的方法不能满足子类的需要,那么子 ...

  7. Java学习笔记13---如何理解“子类重写父类方法时,返回值若为类类型,则必须与父类返回值类型相同或为其子类”

    子类重新实现父类的方法称重写:重写时可以修改访问权限修饰符和返回值,方法名和参数类型及个数都不可以修改:仅当返回值为类类型时,重写的方法才可以修改返回值类型,且必须是父类方法返回值的子类:要么就不修改 ...

  8. python之重写父类方法

    #修改父类的方法#重写父类的方法的目的是为了给他扩展功能,父类的方法已经不能满足需求#核心思想就一句话,先调用一下你要重写的父类方法,class Coon(object): #基本类 def __in ...

  9. STS 重写父类方法的操作

    本来这种东西真的没什么好写的,但是很多时候真的是要用到的,不知道的话自己手动敲,会累死人的.所以记录在这里,自己的笔记,有需要的赶紧拿去,省的手动录入那么辛苦. 在代码窗口点击右键,依次选择“Sour ...

  10. java继承 子类重写父类方法

    package com.addd; //多态 public class Sld { private String name = "zhangsan"; public Sld() { ...

随机推荐

  1. CoreMark简单学习

    CoreMark简单学习 下载 https://github.com/eembc/coremark-pro 需要注意, 其实coremark是有两组. 一组是coremark 一组是 coremark ...

  2. [转帖]多CPU && 多核CPU | 多进程 && 多线程 | 并行 && 并发

    https://cloud.tencent.com/developer/article/1886157?areaSource=&traceId=   文章目录 区分 多CPU &&am ...

  3. 01uni-app的创建运行在不同端上的配置 以及tarBar的配置

    uni-app的创建### 01==>创建uni-app的项目非常简单.不需要注意什么注意点哈!! 创建项目的时候 可以参考官网 https://uniapp.dcloud.io/quickst ...

  4. elemetui-中在input框中回车

    在input框中回车 <el-input @keyup.enter.native="gotoLogin" class="my-el-input" plac ...

  5. 声明式API和命令式API的区别

    声明式API 声明式和命令式的对比 Kubernetes 声明式 API 的工作原理 参考 声明式API 声明式和命令式的对比 命令式 命令式有时也称为指令式,命令式的场景下,计算机只会机械的完成指定 ...

  6. C/C++ 实现Windows注册表操作

    Windows注册表(Registry)是Windows操作系统中用于存储系统配置信息.用户设置和应用程序数据的一个集中式数据库.它是一个层次结构的数据库,由键(Key)和值(Value)组成,这些键 ...

  7. 基于tensorflow的RBF神经网络案例

    1 前言 在使用RBF神经网络实现函数逼近中,笔者介绍了使用 Matlab 训练RBF神经网络.本博客将介绍使用 tensorflow 训练RBF神经网络.代码资源见:RBF案例(更新版) 这几天,笔 ...

  8. col命令

    col命令 在很多UNIX说明文件里,都有RLF控制字符,当我们把说明文件的内容输出成纯文本文件时,控制字符会变成乱码,col命令则能有效滤除这些控制字符. 语法 col [options] 参数 - ...

  9. Laravel入坑指南(1)——Hello World

    接触PHP已经挺长一段时间了,一直对这个世界上最好的语言情有独钟.用熟练了之后,发现PHP不仅是天下第一,而且是宇宙第一.但是自从Laravel诞生之后,博主一直对Laravel有莫名的抵触,觉得这个 ...

  10. 通过performance_schema获取造成死锁的事务语句(转)

    数据库日常维护中我们经常遇到死锁的问题,由于无法获取造成死锁的事务内执行过的语句,对我们死锁的分析造成很大的困难.但是在MySQL 5.7中我们可以利用performance_schema来获取这些语 ...