zoukankan      html  css  js  c++  java
  • C#继承

    1、C#在继承方面支持和不支持的功能。

    • 单重继承: 表示一个类可以派生自一个基类。 C#就采用这种继承。
    • 多重继承: 多重继承允许一个类派生自多个类。 C#不支持类的多重继承, 但允许 接口的多重继承。
    • 多层继承: 多层继承允许继承有更大的层次结构。 类B派生自类A, 类C又派生自 类B。 其中, 类B也称为中间基类, C#支持它, 也很常用。
    • 接口继承: 定义了接口的继承。 这里允许多重继承。

    2、继承和C#的某些特定问题

    2.1、C#不支持多重继承

      C#的设计人员决 定不支持类的多重继承, 因为支持多重继承会增加复杂性, 还会带来一些开销。 而C#又允许类型派生自多个接口。 一个类型可以实现多个接口。 这说明, C#类可以 派生自另一个类和任意多个接口。 更准确地说, 因为System.Object是一个公共的基类, 所 以每个C#类(除了Object类之外) 都有一个基类, 还可以有任意多个基接口。

    2.2 虚方法和抽象方法

    1、虚方法

    把一个基类方法声明为virtual为虚方法,虚方法需声明主体, 就可以在任何派生类中重写该方法,重写方法需要添加关键字“override”,如下所示:

      public  class Animal
        {
            public virtual string Sound()
            {
                return "默认声音";
            }
        }
       public class Cat : Animal
        {
        //可不重写方法 }
    
    

       当派生类没有重新虚方法时,当调用改虚方法,会自动执行基类中的虚方法。重写虚方法后如需执行基类中的对应虚方法使用“base.方法名”即可。

    2、抽象方法

     把一个基类方法声明为abstract就是抽象方法, 抽象方法必须声明在抽象类(类需要声明为abstract类),抽像方法不能声明主体,派生类必须使用“override”进行重写、基类方法无主体不能进行访问。如下所示:

      public abstract class Animal
        {
            public abstract string Sound()
        }
    
        public class Dog: Animal
        {
            public override string Sound()
            {
                return "汪...汪...";
            }
        }
    public class Cat : Animal { public override string Sound() { return "喵...喵..."; //必须重写方法 } }

    总结:

      派生类可访问基类中所有public属性、字段及方法;不能访问基类中私有字段属性及方法。访问权限使用关键字进行控制,如有兴趣可查询C#关键子相关资料。

  • 相关阅读:
    第三次上机
    第5次作业
    第二次上机练习
    第三次作业
    第一次作业
    第一次作业
    第二次上机练习
    第二次作业
    第一次作业
    第四周作业
  • 原文地址:https://www.cnblogs.com/LoveHui0529/p/13045162.html
Copyright © 2011-2022 走看看