zoukankan      html  css  js  c++  java
  • 第11节、C#继承

    C#继承

    描述: 继承允许我们根据一个类来定义另一个类, 建立类的关系,实现代码的利用、方便系统的扩展。继承类的所有成员,被继承的类称为父类或基类,继承其类的类称为子类或派生类。

    特点:

    • 派生类对应基类的扩展,派生类可以添加新的成员,但不能移除已经继承的成员的定义。
    • 继承是可以传递的,如果C从B中继承,B有从A中继承,那么C不仅可以继承B中的声明,同时可以继承A中的声明。
    • 构造函数和折构函数不被继承,除此之外其他成员被继承。基类的方式方式只能决定子类是否能访问它。
    • 一个类不能提同时继承多个父类。
    • 继承实现了代码重用、结构清晰。

    语法(类之间的继承关系是通过冒号实现的,冒号前是派生类,后面是基类)

    Class 基类类名
    {
    类的成员
    }
    
    Class 派生类:基类类名
    {
    类的成员
    }

     范例一

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Text;
     5 using System.Threading.Tasks;
     6 
     7 namespace ConsoleApplication1
     8 {
     9     public class 简单继承
    10     {
    11         //运行入口
    12         public static void Main(string[] age)
    13         {
    14             人 A = new 人();
    15             A.Age = 20;
    16             A.Name = "小明";
    17             A.print();
    18             Console.ReadLine();
    19         }
    20     }
    21 
    22     public class 人类
    23     {
    24         public string name;
    25         public string Name { get; set; }
    26         public void print()
    27         {
    28             Console.WriteLine("姓名:{0}",this.Name);
    29         }
    30     }
    31 
    32     public class 人:人类
    33     {
    34         public int age;
    35         public int Age { get; set; }
    36         public void print()
    37         {
    38             Console.WriteLine("姓名:{0},年龄{1}", this.Name,this.Age);
    39         }
    40     }
    41 }
    简单基础案例代码

     运行结果

     疑问一:调用派生类运行,先实例化基类先还是子类呢(先执行谁的构造方法先)?

    结论:如果子类继承父类,在实例化子类的时候,首先执行父类的构造函数,再执行子类的构造函数。

    base关键字:调用父类成员方法

    访问修饰符 类名(形参):base(实参)
    {
    处理语句;
    }
    

      

    如果在同名的方法中使用 base 关键字调用父类中的方法,则相当于把父类中的方法内容复制到该方法中。

    注意:

    • base关键字表示调用父类的构造方法
    • base(参数1,参数2)中的参数只有参数名,没有数据类型
    • 根据base()的参数个数决定调用父类的那个构造方法;
    • base(参数1,参数2)中的参数名要和子类参数名相同

    二、注意:基类派生类分别有类的带参构造方法,如果派生类没有实现基类的构造方法就提示错误了

     提示父类需要0个参数的构造方法,为啥呢?不懂不明白!

    三、派生类的方法 与基类方法一样,会有什么情况出现

    四、虽然上面能运行,但是编译是错误的,解决方式:用New隐藏基类的方法

     结论:如果签名相同的方法在基类和派生类中都进行了声明,但该方法没有分别声明为virtual和override,派生类方法就会隐藏基类方法。

    五、派生类与基类方法一致情况正确写法。

     结论:

    际是派生类实现了基类的方法,所以基类方法是虚方法virtual,派生类实现重写override

  • 相关阅读:
    Codeforces Round #311 (Div. 2)
    hdu5441 并查集+克鲁斯卡尔算法
    hdu5439 二分
    hdu5422 最大表示法+KMP
    hdu3374 最大最小表示法 +kmp
    hdu2609最小表示法
    hdu4870 高斯消元
    关于并发编程是使用synchronized,lock?
    关于项目中遇到的问题-- trycatch 手动回滚事务
    关于项目中遇到的问题-- 请求接收的参数发生改变情况
  • 原文地址:https://www.cnblogs.com/liuzz/p/14472086.html
Copyright © 2011-2022 走看看