zoukankan      html  css  js  c++  java
  • 什么是继承?

    一,继承是C#中面向对象的特性之一。

    继承,简单一句话就是建立类之间的关系,实现代码的重用性,方便系统扩展。继承的两大特性是单根性和传递性。

    1》继承的单根性:是指子类只能继承一个父类,不能同时继承多个父类。就好比儿子只能有一个父亲(亲生),派生类只能从一个类中继承,继承不支持多重继承。避免代码结构的复杂性。

    2》派生类(子类)继承的共同基类(父类)可以让代码更简洁明了,可扩展性和可维护性好

    3》类Object是 .NET Framework 中所有类、结构、枚举和委托的最终基类,因为 .NET Framework 中的所有类均从 Object 派生,所以 Object 类中定义的每个方法可用于系统中的所有对象。 派生类也可以重写这些方法中的某些。

    而接口是允许多继承。

    如下:

    由上图可看出继承的单根性,不允许多继承

    而接口则编译通过的,允许多继承

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace JiCheng
    {
        interface A
        {
        }
        interface B
        {
        }
        interface C : A, B
        {
        }
    }

    2》继承的传递性:派生类是从基类那里继承特性,派生类也可以作为其他类的基类。从一个基类派生出多层类,这样就形成类层次结构。就是ClassA继承ClassB。ClassA可以调用ClassB的方法和属性,但是ClassB又继承了ClassC所有ClassA也可以调用ClassC的方法和属性。

    如下继承的传递性:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace JiCheng
    {
        class ClassA
        {
        }
        class ClassB : ClassA
        {
        }
        class ClassC : ClassB
        {
        }
    }

     3>继承子类被实例化的时候,父类也会被实例化(构造函数初始化),如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace JiCheng
    {
        class ClassA
        {
            public ClassA()
            {
                Console.WriteLine("ClassA");
            }
        }
        class ClassB : ClassA
        {
            public string B = "ClassB";
            public ClassB()
            {
                Console.WriteLine(B);
            }
        }
        class ClassC : ClassB
        {
            public ClassC()
            {
                Console.WriteLine("ClassC");
            }
        }
        class ClassD : ClassA {
            public ClassD() {
                Console.WriteLine("ClassD");
            }
        }
    }

    实现

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace JiCheng
    {
        class Program
        {
            static void Main(string[] args)
            {
                ClassC c = new ClassC();
                ClassD d = new ClassD();
                Console.ReadKey();
            }
        }
    }

    结果显示:

     综上:子类继承父类,父类会被实例化(初始化构造函数)

  • 相关阅读:
    Build Path
    线程生命周期
    eclipse添加myBatis插件
    Spring web flow的意义
    部署Spring web项目遇到的问题及解决方案
    启动Eclipse时发生An internal error occurred during: "Initializing Java Tooling"错误
    Non-parseable POM 解决方法
    Dynamic Web Module 3.1 requires Java 1.7 or newer. 错误解决方案
    Java compiler level does not match the version of the installed Java project facet.解决方法
    Type cvc-complex-type.2.4.a: Invalid content was found starting with element 'build'.错误的解决方法
  • 原文地址:https://www.cnblogs.com/May-day/p/6398770.html
Copyright © 2011-2022 走看看