C#面向对象程序设计学习笔记(三)

继承

在程序设计中实现继承,表示这个类拥有他继承的类的所有共有成员或者受保护成员,在面向对象的编程中被继承的类称为父类或基类,实现继承的类成为子类或派生类。继承的基本思想是基于某个基类的扩展,制定一个新的派生类,派生类可以继承基类原有的属性和方法,也可以增加原来基类所不具备的属性和方法,或者重写基类中的某些方法。C#中使用“:”来标识两个类的继承关系。子类不能访问基类的私有成员。子类的访问不能高于父类的可访问性,例如下面子类继承父类

子类重写

子类重写父类的方法,如果想要调用父类的方法,就要使用base关键字

base.Property;              //调用父类的属性
base.method();              //调用父类的方法

如果要在子类中使用base关键字调用父类的属性或者方法,父类的属性和方法必须定义为public或者protected类型

class Computer                             //父类:电脑
    {
       public string sayHello()
        {
            return "欢迎使用";
        }
    }
    class Pad : Computer                //继承computer类    子类:平板电脑
    {
       public new string sayHello()                          //子类重写父类方法
        { 
            return base.sayHello() + "平板电脑";             //调用父类方法,在结果后添加字符串

        }
    }

 在子类中定义构造函数时,即可使用base关键字来调用基类的构造函数

多态

它使得子类的实例可以直接赋予基类的对象,然后直接就可以通过这个对象调用派生类的方法,在C#中,类的多态性是通过在派生类中重写基类的虚方法来实现。

在C#中,方法在默认情况下不是虚拟的,但(除了构造函数以外)可以显示地声明为virtual,在方法前面加上关键字virtual,则称该方法为虚拟方法,定义虚方法后,可以在子类重写虚方法,重写虚方法使用override关键字。

类中的成员字段和静态方法不能声明为virtual,因为virtual只对类中的实例方法和属性有意义。

可以创建类名的数组,例如Vehicle[ ] vehicles={vehicle,train,car}

抽象类和抽象方法

如果一个类不与具体的事物相联系,仅仅是作为其派生类的一个基类,这样的类就可以声明为抽象类,C#中声明抽象类时需要使用abstract关键字,抽象类不能直接实例化,其中可以包含抽象成员,但非抽象类中不可以,抽象类中不能被密封,抽象方法必须声明在抽象类中,声明抽象方法时,不能使用virtual、static、private修饰符。例子如下:

当从一个派生类中生成一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现,在重写抽象方法时需要使用override关键字.。

public abstract class Market                    //创建抽象类
    {
        public string Name { get; set; }       //商场名称属性
        public string Goods { get; set; }         //商品名称属性

        public abstract void Shop();           //抽象方法
    }
    public class WallMarket : Market                 //继承抽象类
    {
        public override void Shop()                    //重写抽象方法
        {
            Console.WriteLine(Name + "购买" + Goods);
        }
    }
   class Program
   {
        static void Main(string[] args)
        {
            Market market = new WallMarket();          //使用子类对象创建抽象类对象
            market.Name = "沃尔玛";
            market.Goods = "衣服";     
            market.Shop();
            Console.ReadLine();
         
        }
    }

接口

C#中的类不支持多重继承,但现实生活中有很多多重继承的问题,为了解决这个问题,通过接口可以实现多重继承的功能,对于声明接口时,使用interface关键字,接口可以继承其他接口,类可以通过其继承的基类(或接口)多次继承同一个接口。

接口的特征:接口类似于抽象基类,继承接口的任何类型都必须实现接口的所有成员;接口中不能包括构造函数,因此不能直接实例化接口;接口只能定义成员,不能实现成员;接口中定义的成员不允许加访问修饰符,因为接口成员永远是公共的;接口中的成员不能声明为虚拟或者静态。

interface Information                  //定义接口
{ 
     string Code{get;set;}               //编号属性及实现
     string Name{get;set;}               //名称属性及实现
     void ShowInfo();                   //用来输出信息
}

接口实现通过类继承来实现,一个类虽然只能继承一个基类,但可以继承任意多个接口。声明实现接口的类时,需要在继承列表中包含所实现的接口的名称,多个接口之间用逗号(,)分割。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值