继承

  一个类可以继承自另一个类。在 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. Chapter 4 Invitations——6

    The snow washed away for good after that one dangerously icy day. 在危险的冰天雪地之后,这场雪洗走了很多. Mike was disa ...

  2. 详谈js防抖和节流

    本文由小芭乐发表 0. 引入 首先举一个例子: 模拟在输入框输入后做ajax查询请求,没有加入防抖和节流的效果,这里附上完整可执行代码: <!DOCTYPE html> <html ...

  3. MyBatis源码解析(十一)——Parsing解析模块之通用标记解析器(GenericTokenParser)与标记处理器(TokenHandler)

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6724223.html 1.回顾 上面的几篇解析了类型模块,在MyBatis中类型模块包含的 ...

  4. python字典类型

    字典类型简介 字典(dict)是存储key/value数据的容器,也就是所谓的map.hash.关联数组.无论是什么称呼,都是键值对存储的方式. 在python中,dict类型使用大括号包围: D = ...

  5. Python系列:四、Python函数--技术流ken

    Python函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可 ...

  6. java.lang.NoSuchMethodException: tk.mybatis.mapper.provider.SpecialProvider.<init>()

    Caused by: org.apache.ibatis.builder.BuilderException: Error invoking SqlProvider method (tk.mybatis ...

  7. TypeScript学习之WebStorm(1)

    修改快捷键 本没有想要修改快捷键,调试的时候下意识的 按F10,发现还是习惯使用visual studio的快捷键.WebStorm支持修改快捷键,File=>Settings=>Keym ...

  8. vue IE 报错 引用babel-polyfill

    一.vue 项目报错 vuex requires a Promise polyfill in this browser     在网上找到下面三篇文章,然而和我的项目都不太一样. 我的项目基于 基础模 ...

  9. 如何用ftp上传静态网站到虚拟空间

    ftp是一种网络传输协议,你要上传网站到空间首先你要安装一个FTP软件,你申请的空间有一个网址.账号.密码之类的,你打开FTP输入这些链接就可以准备上传网站了,软件打开有一个本地界面,还有一个空间界面 ...

  10. JS 操作svg画图

    背景: 一共有3个文件:svg文件,html文件,js文件. 有一个svg图,使用embed标签,引入到了html文件中 svg文件: <svg width="640" he ...