继承和多态

继承即一个类可以派生出新的类,而且新的类能继承基类的成员;多态性是指相同的操作或方法可作用于多种类型的对象,并获得不同的结果,多态性是通过继承来实现的。继承和多态使包括C#在内的所有面向对象语言的本质核心。

继承

如果一个类继承了它的直接基类的成员,这个类就叫做它的基类的子类或者派生类。继承意味着子类隐式的把它的直接基类的所有成员当做自己的成员,但是子类并不能继承基类的构造函数和析构函数。
C#的继承原则
(1)除了类Object,每个类有且只有一个直接基类。
(2)无论基类成员的可访问性如何,除构造函数和析构函数以外,所有其他基类的成员都能被继承。然而,有些继承成员在派生类可能是不可访问的,着取决于基类成员的可访问性。例如基类的private成员也是子类的private成员,但在子类中不可访问。

        public class Shape
        {
            private string comments;
            protected string name;
            public string Name
            {
                get
                {
                    return name;
                }
                set
                {
                    name = value;
                }
            }
            public Shape()//构造函数
            {

            }
            public Shape(string name)
            {
                this.name = name;
            }
            public void Draw()
            {
                Console.WriteLine("画形状");
            }
        }
        public class Rectangle : Shape
        {
            protected int width;
            protected int height;
            public int Width
            {
                get
                {
                    return width;
                }
            }
            public int Height
            {
                get
                {
                    return height;
                }
            }
            public  Rectangle()
            {

            }
            public Rectangle(int x,int y)
            {
                width = x;
                height = y;
            }
            public int ComputeArea()
            {
                return width * height;
            }
        }

根据上述例子,Rectangle类将继承Shape类的以下成员:
1.comments字段:类型为private,在Rectangle类内部不可见,只在Shape类内可见。
2.name字段:类型protected,在Rectangle类内是可访问的,在类外不可访问。
3.Name属性
4.Draw方法
所以,纪要保证基类的成员在子类中可见,又要保证数据的封装性,那么可以使用protected访问修饰符。如果是基类专有的,是不希望子类看见的,就应该使用private修饰符。

多态

在具有继承关系的类中,不同对象的签名相同的函数成员可以有不同的实现,因而会产生不同的执行结果,着就是多态性。C#的运行多态性通过再子类中重写基类的虚方法或函数成员来实现。
虚方法:实例方法的声明中含有virtual修饰符,它不允许与static,abstract,private或者override修饰符同时使用
重写方法:实例方法声明中含有override修饰符,重写方法用相同的签名重写所继承的虚方法。虚方法声明用于应用新方法,而重写方法声明则使用从基类继承而来的虚方法专用化。重写方法只能用于重写基类的虚方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值