• 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方式:重写基类中的方法(包括虚方法),只有当本类被实例化时才会覆盖父类的方法;
  • 相关阅读:
    并发实现-Callable/Future 实现返回值控制的线程
    Sql Server查询,关闭外键约束的sql
    Kettle-动态数据链接,使JOB得以复用
    Python爬虫实践~BeautifulSoup+urllib+Flask实现静态网页的爬取
    javaAPI操作Hbase
    Linux下的网络环境配置
    DataCleaner(4.5)第二章
    DataCleaner(4.5)第一章
    SpringBoot 使用 MyBatisPlus-Generator 快速生成model实体类
    Java 使用hutool工具类代替commons-text进行Json 中文 Unicode转换
  • 原文地址:https://www.cnblogs.com/tenghoo/p/995013.html
Copyright © 2020-2023  润新知