第11节、C#继承

摘要:
继承类的所有成员。继承的类被称为父类或基类,继承其类的类被称作子类或派生类。继承可以转移。如果C从B继承,B从A继承,那么C不仅可以继承B中的声明,还可以继承A中的声明。构造函数和析构函数不被继承,其他成员被继承。

C#继承

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

特点:

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

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

Class 基类类名
{
类的成员
}

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

 范例一

第11节、C#继承第1张第11节、C#继承第2张
 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 }
简单基础案例代码

 运行结果

第11节、C#继承第3张

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

第11节、C#继承第4张

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

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

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

  

第11节、C#继承第5张

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

注意:

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

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

第11节、C#继承第6张

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

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

第11节、C#继承第7张

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

第11节、C#继承第8张

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

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

第11节、C#继承第9张

 结论:

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

免责声明:文章转载自《第11节、C#继承》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇多种方式实现千位分隔符PSPNet论文阅读笔记下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

angular 依赖注入

依赖注入    依赖注入(DI)是一个经典的设计模式, 主要是用来处理组件如何获得依赖的问题。关于DI,推荐阅读Martin Flower的文章(http://martinfowler.com/articles/injection.html )。    Angular负责创建组件,解决它们之间的依赖关系,并按要求提供其他组件。 使用依赖注入   依赖注入在...

String源码详解

一、基本概念。     1、继承实现关系。因为被final修饰,因此是不可继承的String类,避免被他人继承后修改。实现了三个接口。可序列、可比较,有序。几个String兄弟类     2、本质就是字符数组,同时,它是不可变的。 二、成员变量。      1、字符数组value。访问权限私有,因此String类外具有不可访问特点,因为具有final...

精选30道Java笔试题解答

转:精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底, 老手们就不用进来了,免得笑话我们这些未出校门的孩纸们,但是IT公司就喜欢考这些基础的东西,所以为了能进大公司就~~~当复习期末考吧。花了不少时间整理,在整理过程中也学到了很多东西...

【转】C++中了类继承和调用父类的构造函数方法

构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。     如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。 构造原则...

Java 的ArrayList构造方法

目录 ArrayList 构造方法使用 ArrayList 类常用方法 ArrayList集合存储字符串遍历 简单的学生管理系统   1、ArrayList 构造方法 ArrayList类概述  什么是集合   提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ‘   ArrayList集合的特点 底层是数组实现的,长度可以变化   泛型的...

深入剖析C#多态性

    本节课将介绍C#的多态性,其目的包括: 1.了解什么是多态性 2.如何定义一个虚方法 3.如何重载一个虚方法 4.如何在程序中运用多态性 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。 可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用就体现出来了,这...