继承

  一个类可以继承自另一个类。在 C#中,类与类之间只存在单一继承。也就是说,一个类的直接基类只能有一个。当类与类之间实现继承的时候,子类可以将它的直接基类的所有成员当做自己的成员,除了类的静态构造方法、实例构造方法和析构方法。但是,虽然基类的所有成员都可以当做子类的成员,但是如果基类的成员设置了不同的访问权限,则派生类可以访问的成员也随之不同。C#的继承是可以传递的,如果类C从类B派生,而类B从类A派生,则类C将继类B的所有成员,也继承类A的所有成员(各个基类的静态构造方法、实例构造方法和析构方法除外)。子类(派生类)可以在继承的 基础上添加属于自己的成员,但是它不能移除继承来的父类(基类)的成员。析构方法的作用是销毁类的实例,后续的文章我会总结说明。

  下面看代码实例:

 using System;
namespace LycheeTest {
public class TV {
private int channel = ; //电视机的频道
private int volume = ; //电视机的音量
public static string model = "39 英寸液晶"; //型号
/// <summary>
/// 具体设置电视机的频道和音量,因为只提供给子类使用 /// 所以用 protected 访问权限关键字修饰
/// </summary>
/// <param name="ch">具体设置的频道数</param>/// <param name="vol">具体设置的音量值</param>
protected void Set(int ch, int vol) {
channel = ch;
volume = vol;
Console.WriteLine("设置完毕");
}
/// <summary>
/// 增加频道
/// </summary>
public void ChPlus() {
channel++;
}
/// <summary>
/// 增加音量
/// </summary>
public void VolPlus() {
volume++;
}
/// <summary>
/// 将信息显示在电视机屏幕上
/// </summary>
public void Show() {
Console.WriteLine("电视机型号是:{0}", model);
Console.WriteLine("频道:{0}", channel);
Console.WriteLine("音量:{0}", volume);
}
}
public class NewTV: TV {
public void PlayUDisk() {
this.Set(, );
this.Show();
Console.WriteLine("现在开始播放 U 盘的视频文件......");
}
}
class Program {
static void Main(string[] args) {
NewTV myNewTV = new NewTV();
myNewTV.ChPlus();
myNewTV.VolPlus();
myNewTV.Show();
myNewTV.PlayUDisk();
Console.ReadKey();
}
}
}

  上面这段代码中,第 3 行代码定义了基类 TV。它的静态字段和实例字段都有一个初始值设定项进行了字段的初始化。第 11 行代码添加了一个实例方法,它的访问修饰符为 protected。使用这个修饰符,只有本类的定义内部和它的派生类内部可以访问它。为什么要使用这个访问修饰符呢?因为这个方法不是给类的外部使用的。也就是说,它没有必要向用户公开。但是它的继承类又需要使用它,因此使用这个访问权限关键字可以保证一定程度的公开性,即定向公开,只为继承类开放。这个方法的作用是具体设置实例字段的值。让实例字段在模拟播放 U 盘的内容时,电视机的频道和音量能有一个特定值。除此之外,基类的其它方法没 有改动。第 37 行代码定义了一个子类,也就是派生类。它继承基类的语法就是在类名后加一个冒号,然后接一 个基类的类名称。第 38 行代码定义了一个方法,在这个方法中调用了基类的 Set 方法,并且为基类的方法传入了两个参 数,这两个参数确定了在播放 U 盘的内容时,电视机的频道为 0,音量为 30。注意当调用 Set 方法的时候, 使用了 this 关键字,它表示这个方法就是实例自己的,因为它是从基类继承下来的,相当于自己的财产。 然后又调用了基类的 Show 方法来再一次显示频道和音量的设置值。因此,类 TV 和类 NewTV 之间的关系可 以这么描述,类 TV 可以看做是一种电视机的原型机,类 NewTV 可以看做在这种原型机的基础上,电视机又 进行了升级,它添加了 U 盘播放的功能,而其它功能可以直接从原型机继承,而不必再重新进行设计。第 46 行代码定义了子类的实例,然后第 47 行、48 行和第 49 行直接调用了基类中定义的实例方法, 因为这些方法都已经继承下来,完全属于子类自己。第 50 行调用了子类定义的新添加的属于自己的方法。这段代码的执行结果如下:

电视机型号是: 英寸液晶
频道:
音量: 设置完毕
电视机型号是: 英寸液晶
频道: 音量:
现在开始播放 U 盘的视频文件......

C#核心基础--类的继承的更多相关文章

  1. C#核心基础--类(2)

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  2. C#核心基础--类的声明

    C#核心基础--类的声明 类是使用关键字 class 声明的,如下面的示例所示: 访问修饰符 class 类名 { //类成员: // Methods, properties, fields, eve ...

  3. Python 基础 类的继承

    如果寂静定义了Person类,需要定义新的Student 和Teacher 类时 可以直接从Person 中继承 class Person(Object): def __init__(self,nam ...

  4. python基础-类的继承

    继承:承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”.“父类. 继承的过程,就是从一般到特殊的过程.要实现继承,可以通过“继承”(Inheritance)和“组合”(Compositio ...

  5. python__基础 : 类的继承,调用父类的属性和方法

    1.继承,调用父类属性方法 在python里面,继承一个类只需要这样写: class Animal: def heshui(self): print('动物正在喝水') class Cat(Anima ...

  6. python基础--类的继承以及mro

    继承: 什么是继承: 继承是一种关系,描述两个对象之间什么是什么的关系 在程序中,继承描述的是类和类之间的关系 例如 a继承了b,a就能直接使用b已经存在的方法和属性了 a称之为子类,b称之为父类,成 ...

  7. c#核心基础--类的构造方法

    一.构造方法 类的构造方法是类的成员方法的一种,它的作用是对类中的成员进行初始化操作.类的构造方法分为: 1.静态构造方法 2.实例构造方法 3.私有构造方法 1.静态构造方法 类的静态构造方法是类的 ...

  8. 【JAVA零基础入门系列】Day13 Java类的继承与多态

    继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟 ...

  9. java类的继承(基础)

    ---恢复内容开始--- 这篇随笔和大家讲讲java中类的继承是什么?希望对你们有所帮助. 目录 一.java继承是什么? 二.为什么使用java继承 三.java继承的实现 1.1  java继承的 ...

随机推荐

  1. Shell脚本-自动化部署WEB

    #! /bin/ ] then echo "#### 参数有误,\$1:构建号必填" exit fi cd /root/workspace/xinya_erp/xinya_web ...

  2. vue-08-axios-get-post-跨域

    1, 安装 cnpm install axios --save 2, 在main.js中引入 import Axios from 'axios' // 挂在在Vue上Vue.prototype.$ax ...

  3. vue-07-自定义指令

    1, 全局指令 在main.js中引入 // 注册一个全局自定义指令 `v-focus` Vue.directive('focus', { // 当被绑定的元素插入到 DOM 中时…… inserte ...

  4. spring boot(三) 集成mybatis

    前言 还记得之前我们写接口也是基于SpringMVC+MyBatis环境下,项目入手就需要N个配置文件,N个步骤才能实现,不但繁琐,而且时间长了xml配置文件太多,难以维护.现在基于spring bo ...

  5. Apollo 7 — ConfigService 消息扫描设计实现

    目录 设计 代码实现 总结 1.设计 Apollo 为了减少依赖,将本来 MQ 的职责转移到了 Mysql 中.具体表现为 Mysql 中的 ReleaseMessage 表. 具体官方文档可见:发送 ...

  6. BurpSuite 各模块使用

    Proxy  代理 对浏览器进行代理 对浏览器增加代理服务器 可以对http 请求进行监视 intercept is on 进行监控  off 不监控 可以任意修改 对任意的网络请求 进行爬虫 在 s ...

  7. Mysql与SQLserver区别

    1.为空 SQLserver用isnull Myserver用ifnull 2.全球唯一标识符 SQLserver用newid() Myserver用uuid() 3.以分隔符拼接字符串 concat ...

  8. C-Linux_定时器示例使用

    #include <stdlib.h> #include <signal.h> ; static struct itimerval oldtv; struct itimerva ...

  9. a dive in react lifecycle

    背景:我在react文档里找生命周期的图,居然没有,不敢相信我是在推特上找到的... 正文 react v16.3 新生命周期: static getDerivedStateFromProps get ...

  10. vue(二)-父子组件语法

    语法: 子组件: 给子组件弄个名字,name.props用来声明从父组件传来的数据.其他html和css部分正常写. 父组件: HTML部分:使用子组件name作为标签来显示子组件.:items=“i ...