一.override和new 关键字隐藏父类的方法

正常情况下,父类virtual的方法,子类override

class Animal
{
public virtual void EatFood()
{
Console.WriteLine("动物在吃东西");
}
}
class Cat : Animal
{
public override void EatFood()
{
Console.WriteLine("猫在吃鱼");
}
} class Program
{
static void Main(string[] args)
{
Animal animal = new Cat();
animal.EatFood();//输出的是子类的方法
Console.Read();
}
}

另外一种情况,父类的方法不是virtual的,但是子类中有同名的方法

但是子类需要隐藏掉父类的方法

class Animal
{
public void EatFood()
{
Console.WriteLine("动物在吃东西");
}
}
class Cat : Animal
{
new public void EatFood()//通道new关键字,隐藏掉父类的方法
{
Console.WriteLine("猫在吃鱼");
}
} class Program
{
static void Main(string[] args)
{
Animal animal = new Cat();
animal.EatFood();//输出的是父类的方法
Console.Read();
}
}

需要注意的是两种方式隐藏父类方法输出结果不一样,override 输出子类方法

                        new     输出父类方法

C#中抽象类和接口的区别与使用  :https://www.cnblogs.com/sunzhenyong/p/3814910.html

C#中Abstract 、Virtual和Override的使用 : https://www.cnblogs.com/akwwl/archive/2012/08/03/2622026.html

C#隐藏父类的更多相关文章

  1. 隐藏父类方法的new和重写父类虚方法virtual的区别

    一.代码 public class Parent { public void Method_A() { Console.WriteLine("Parent Method_A"); ...

  2. c/c++ 继承与多态 子类隐藏父类的同名非虚函数

    问题1:若类A里有公有成员方法int fcn(),类B公有继承类A,并类B里有公有成员方法int fcn(int),可以在用户代码里,用类B的对象调用类A的int fcn()吗?? 不可以,编译出错, ...

  3. override和new关键字 隐藏父类的方法

    正常情况下,父类virtual的方法,子类override class Animal { public virtual void EatFood() { Console.WriteLine(" ...

  4. 为何JAVA虚函数(虚方法)会造成父类可以"访问"子类的假象?

      首先,来看一个简单的JAVA类,Base. 1 public class Base { 2 String str = "Base string"; 3 protected vo ...

  5. java覆盖和隐藏

    隐藏指的是子类把父类的属性或者方法隐藏了,即将子类强制转换成父类后,调用的还是父类的属性和方法,而覆盖则指的是父类引用指向了子类对象,调用的时候会调用子类的具体方法. (1) 变量只能被隐藏(包括静态 ...

  6. java的重载、覆盖和隐藏的区别

    重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...

  7. Java 隐藏和覆盖

    我们知道,在JAVA中,子类可以继承父类,如果子类声明的方法与父类有重名的情况怎么办,大伙儿都知道要是重写,但是实际上这又分为两种情况,就是方法和变量在继承时的覆盖和隐藏问题,这些概念性的东西看似无聊 ...

  8. java中重载、覆盖和隐藏三者的区别分析

    重载:方法名相同,但参数不同的多个同名函数 注意:1.参数不同的意思是参数类型.参数个数.参数顺序至少有一个不同 2.返回值和异常以及访问修饰符,不能作为重载的条件(因为对于匿名调用,会出现歧义,eg ...

  9. C++ 方法隐藏

    1.过载:一个类中,方法名相同,形参表不同的方法. 2.重写:子类与父类的virtual方法,方法名,形参表相同. 3.考虑下面的情况,子类与父类方法名相同. 父类是virtual方法         ...

随机推荐

  1. Java 中的字符串与 []byte 字节数组

    一.字符串 1.比较 String.HashSet.List 中的 contains 方法 其中, String.List 都使用了 indexOf 方法,本质是遍历,时间效率为 O(n).而 Has ...

  2. javascript的数组之reduce()

    reduce()方法对累加器和数组中的每个元素(从左到右)应用到一个函数中,最终得到一个值并返回 const array1 = [1, 2, 3, 4]; const reducer = (accum ...

  3. ELK之使用packetbeat分析网络包流量

    介绍 packbeat是一个开源的实时网络抓包与分析框架,内置了很多常见的协议捕获及解析,如HTTP.MySQL.Redis等.在实际使用中,通常和Elasticsearch以及kibana联合使用, ...

  4. Swift之Swift编码规范

    swift 支持的 markdown 语法. 1. 编码格式 1.1 使用二元运算符(+, -,==, 或->)的前后都需要添加空格 let value = + 1.2 在逗号后面加一个空格 l ...

  5. Pycharm汉化

    简单的汉化方法:    需要把以下链接的文件放到Pycharm安装目录的lib目录下记得重启pycharm即可https://pan.baidu.com/s/1GG4zXZ_0xSB-AlDdu0Tu ...

  6. NodeJS笔记(五) 使用React Native 创建第一个 Android APP

    参考:原文地址 几个月前官方推出了快速创建工具包,由于对React Native不熟悉这里直接使用这2个工具包进行创建 1. create-react-native-app(下文简称CRNA): 2. ...

  7. Es6的用法

    var callBack=[]; // 这个等于是个闭包,i会累加到3在做运算,所以结果都是6 ;i<=;i++) { callBack[i]=function(){ ; } } console ...

  8. if(a)

    let a = undefined; let b = null; let c = ''; let d = ; let e = {}; let f = []; if (a) { console.log( ...

  9. vue中keep-alive使用时,注意要点

    <keep-alive exclude="QRCode,NewsInfor,VipRecordDetail"> <router-view></rout ...

  10. 小程序:scroll-view组件滑动多次触发scroll事件的bug解决

    在项目开发过程中,组件是微信小程序提供给我们的一个分页器,一般滑动到底部时会触发scroll事件,scroll事件中往往包含对后端数据的请求:若是还未滑动到底部时频繁触发事件,则会频繁发请求,达不到想 ...