zoukankan      html  css  js  c++  java
  • C#中的继承(一)

    百科里关于继承的解释:
    一、常见的解释
    1.接续前人未完的事业。
    2.承继死者的遗产或权利。
    二、编程中的术语
          “继承”是面向对象软件技术当中的一个概念。如果一个类B继承自另一个类A,就把这个B称为"A的子类",而把A称为"B的父类"。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在令子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。
    这里给出类A和类B,具体说明请见注释:
    类A:

        public class A
        
    {
            
    public virtual void Fun1()
            
    {
                Console.WriteLine(
    "A的第一个儿子");
            }

            
    public virtual void Fun2()
            
    {
                Console.WriteLine(
    "A的第二个儿子");
            }

            
    public virtual void Fun3()
            
    {
                Console.WriteLine(
    "A的第三个儿子");
            }

            
    public virtual void Fun4()
            
    {
                Console.WriteLine(
    "A的第四个儿子");
            }

            
    public void Fun5()
            
    {
                Console.WriteLine(
    "A的第五个儿子");
            }

            
    public void Fun6()
            
    {
                Console.WriteLine(
    "A的第六个儿子");
            }

            
    public void Fun7()
            
    {
                Console.WriteLine(
    "A的第七个儿子");
            }

            
    public void Fun8()
            
    {
                Console.WriteLine(
    "A的第八个儿子");
            }

        }

    类B,继承自类A:
       public class B:A
        
    {
            
    //通过override重写基类中的虚方法Fun1   
            public override void Fun1()
            
    {
                Console.WriteLine(
    "B的第一个儿子");
            }

            
    //隐藏基类中的虚方法Fun2
            public void Fun2()
            
    {
                Console.WriteLine(
    "B的第二个儿子");
            }

            
    //通过new重写基类中的虚方法Fun3,只在实例化本类B时覆盖父类方法Fun3
            new public void Fun3()
            
    {
                Console.WriteLine(
    "B的第三个儿子");
            }

            
    //子类中没有对父类的虚方法Fun4做任何处理
            
    //Fun4
            
    //编译通不过,因为A.Fun5未被标记为:virtual,abstract,overrde.无法进行重写.
            
    //public override void Fun5()
            
    //{
            
    //    Console.WriteLine("B的第五个儿子");
            
    //}
            
    //隐藏基类中的Fun6
            public void Fun6()
            
    {
                Console.WriteLine(
    "B的第六个儿子");
            }

            
    //通过new重写基类中Fun7 
            new public void Fun7()
            
    {
                Console.WriteLine(
    "B的第七个儿子");
            }

            
    //子类中没有对父类的方法Fun8做任何处理
            
    //Fun8
        }

    以下是对类A和类B的操作:
      public class P
        
    {
            
    static void Main(string[] args)
            
    {
                A A1 
    = new B();
                Console.WriteLine(
    "A1:");
                A1.Fun1();
                A1.Fun2();
                A1.Fun3();
                A1.Fun4();
                A1.Fun5();
                A1.Fun6();
                A1.Fun7();
                A1.Fun8();
                B B1 
    = new B();
                A A2 
    = B1;
                
    //上面的两句:B B1 = new B();和A A2 = B1;相当于 A A1 = new B();
                Console.WriteLine("B1:");
                B1.Fun1();
                B1.Fun2();
                B1.Fun3();
                B1.Fun4();
                B1.Fun5();
                B1.Fun6();
                B1.Fun7();
                B1.Fun8();
                Console.WriteLine(
    "A2:");
                A2.Fun1();
                A2.Fun2();
                A2.Fun3();
                A2.Fun4();
                A2.Fun5();
                A2.Fun6();
                A2.Fun7();
                A2.Fun8();
                Console.ReadLine();
            }

        }
    结果:

    说明:
    这里涉及到重写的方式(先不涉及抽象的概念):
    virtual-override方式:
    基类中被标识为virtual的方法其引用地址是程序在运行时才确定的,当父类访问子类时,如果子类中以override的方式重写了父类中的虚方法,这时虚方法的实际地址便指向被override覆盖的方法.如:A1.Fun1();
    -new方式:重写基类中的方法(包括虚方法),只有当本类被实例化时才会覆盖父类的方法;
  • 相关阅读:
    asp调用存储过程
    ASP生成静态文件
    DataReader
    Html中的table
    比较完整的CSS定义表格样式
    HTML中ul,ol,li,dl,dt,dd标签用法
    Sql Server 分区演练
    AWK
    samba配置
    【openSUSE】软件源和软件搜索 看了之后 受益匪浅
  • 原文地址:https://www.cnblogs.com/tenghoo/p/995013.html
Copyright © 2011-2022 走看看