博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.隐藏继承的成员new / 虚方法(override)/ abstract / 多态 ----- 重写
阅读量:5305 次
发布时间:2019-06-14

本文共 1885 字,大约阅读时间需要 6 分钟。

总结:

1. 在继承上, new/override没区别

2. 在多态上,new不支持多态,override支持

 

在C#中改变类中相同名称的方法的实现过程中有三种方式:重载、重写和覆盖。

重载指具有相同的方法名,通过改变参数的个数或者参数类型实现同名方法的不同实现。

重写:则是只在继承中,子类通过override关键字修饰方法,实现父类和子类相同方法的不同实现,注意,父类方法必须是用virtual或者abstract关键字修饰的虚方法或者抽象方法

覆盖:则是指在继承中,子类通过在与父类相同方法名之前用new修饰的一个新的方法的定义

 

1.new ---- 子类隐藏父类的方法,覆盖(总结:new关键字不支持多态

下面的例子我们可以发现new 关键字,并不支持多态的应用

我们使用多态调用的任然还是父类中的方法,也就是被隐藏的方法

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Father fa = new Son();            fa.print();        }    }    class Father    {        public  void print()        {            Console.WriteLine("我是父类");        }    }    class Son : Father    {        public new void print()        {            Console.WriteLine("我是子类");        }    }}

 输出:

 

如果我们使用了多态创建了实例,要调用子类重写的方法,需要强制转换成子类类型,实例如下:

class Program    {        static void Main(string[] args)        {            Father fa = new Son();            Son so = (Son)fa;            so.print();        }    }

 

输出:

 

 

2.virtual-- 重写 abstract--实现 (总结:这两种都支持多态)

a.重写父类的方法要用到override关键字(具有override关键字修饰的方法是对父类中同名方法的新实现) b.要重写父类的方法,前提是父类中该要被重写的方法必须声明为virtual或者是abstract类型。(virtual修饰的可以有方法体,子类不一定要重写  abstract没有方法体,子类必须要实现) C.virtual关键字用于将方法定义为支持多态,有virtual关键字修饰的方法称为“虚拟方法” 实例如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{    class Program    {        static void Main(string[] args)        {            Father fa = new Son();            fa.print();        }    }    class Father    {        public virtual void print()        {            Console.WriteLine("我是父类");        }            }    class Son : Father    {        public override void print()        {            Console.WriteLine("我是子类");        }    }}
输出:

 

转载于:https://www.cnblogs.com/zjdbk/p/9274341.html

你可能感兴趣的文章
【Java】 剑指offer(53-2) 0到n-1中缺失的数字
查看>>
Delphi中ListView类的用法
查看>>
多米诺骨牌
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
Attribute(特性)与AOP
查看>>
苹果手表:大方向和谷歌一样,硬件分道扬镳
查看>>
Competing Consumers Pattern (竞争消费者模式)
查看>>
Android面试收集录15 Android Bitmap压缩策略
查看>>
PHP魔术方法之__call与__callStatic方法
查看>>
ubuntu 安装后的配置
查看>>
web前端之路,js的一些好书(摘自聂微东 )
查看>>
【模板】对拍程序
查看>>
【转】redo与undo
查看>>
解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
查看>>
Java Session 介绍;
查看>>
spoj TBATTLE 质因数分解+二分
查看>>
Django 模型层
查看>>
dedecms讲解-arc.listview.class.php分析,列表页展示
查看>>
Extjs6 经典版 combo下拉框数据的使用及动态传参
查看>>