c#核心基础--类的继承

继承

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

  下面看代码实例:

 1 using System;
 2 namespace LycheeTest {
 3     public class TV {
 4         private int channel = 1; //电视机的频道
 5         private int volume = 20; //电视机的音量
 6         public static string model = "39 英寸液晶"; //型号
 7         /// <summary>
 8         /// 具体设置电视机的频道和音量,因为只提供给子类使用    /// 所以用 protected 访问权限关键字修饰
 9         /// </summary>
10         /// <param name="ch">具体设置的频道数</param>/// <param name="vol">具体设置的音量值</param>
11         protected void Set(int ch, int vol) {
12             channel = ch;
13             volume = vol;
14             Console.WriteLine("设置完毕");
15         }
16         /// <summary>
17         /// 增加频道
18         /// </summary>
19         public void ChPlus() {
20             channel++;
21         }
22         /// <summary>
23         /// 增加音量
24         /// </summary>
25         public void VolPlus() {
26             volume++;
27         }
28         /// <summary>
29         /// 将信息显示在电视机屏幕上
30         /// </summary>
31         public void Show() {
32             Console.WriteLine("电视机型号是:{0}", model);
33             Console.WriteLine("频道:{0}", channel);
34             Console.WriteLine("音量:{0}", volume);
35         }
36     }
37     public class NewTV: TV {
38         public void PlayUDisk() {
39             this.Set(0, 30);
40             this.Show();
41             Console.WriteLine("现在开始播放 U 盘的视频文件......");
42         }
43     }
44     class Program {
45         static void Main(string[] args) {
46             NewTV myNewTV = new NewTV();
47             myNewTV.ChPlus();
48             myNewTV.VolPlus();
49             myNewTV.Show();
50             myNewTV.PlayUDisk();
51             Console.ReadKey();
52         }
53     }
54 }

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

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

(今天先写到这里...后续补完)

时间: 2024-08-26 05:01:03

c#核心基础--类的继承的相关文章

【Unity】NGUI插件核心脚本类的继承关系

虽说目前(2015年3月28日)Unity4.6版本之后推出的UGUI系统替代NGUI已是大势所趋, 但作为被长久且广泛使用的优秀插件之一,NGUI的代码和架构依然有很多地方值得我们学习和借鉴. 本文整理了NGUI插件中的核心组件和功能组件脚本类的继承关系,并以图示的方式给出了初步分类. 原文首发:http://blog.csdn.net/duzixi 官方资料:http://www.tasharen.com/forum/index.php?topic=6754.0 NGUI版本:3.6.0

JAVA基础-类的继承

父类: public class ManKind { int sex; int salary; //判断性别 void manOrWoman(){ if(sex == 1){ System.out.println("man"); }else if(sex == 0){ System.out.println("woman"); } } //通过收入判断是否有工作 void employeed(){ if(salary == 0){ System.out.println

Python基础- 类和对象(使用、继承、派生、组合、接口、多态、封装、property、staticmethod、classmethod、反射、slots、上下文管理协议、元类)

标签: python对象 2017-07-01 16:28 79人阅读 评论(0) 收藏 举报  分类: python(11)  版权声明:本文为广大朋友交流学习,如有纰漏望不吝赐教,若存在版权侵犯请及时与我联系 目录(?)[+] 一.初识类和对象 在python3中类型就是类 先定义类在产生相对应的对象,也就是现有了概念再有了实体 class Garen: camp = 'Demacia' def attack(self): print('attack') 1.如何使用类 在python3:

Python基础(16)_面向对象程序设计(类、继承、派生、组合、接口)

一.面向过程程序设计与面向对象程序设计 面向过程的程序设计:核心是过程,过程就解决问题的步骤,基于该思想设计程序就像是在设计一条流水线,是一种机械式的思维方式 优点:复杂的问题的简单化,流程化 缺点:扩展性差 面向对象的程序设计:核心是对象,对象是特征(变量)与技能(函数)的结合体,是一种上帝式的思维方式 优点:解决了程序的扩展性 缺点:可控性差 二.类和对象 以游戏举例,基于面向对象设计一个款游戏:英雄联盟,每个玩家选一个英雄,每个英雄都有自己的特征和和技能,特征即数据属性,技能即方法属性,特

【代码笔记】Java基础:类的继承(构造器)

在Java中,创建对象的格式为: 类名 对象名 = new 类名(): 如: 1 JFrame jf = new JFrame(); 一个对象被创建出来时,经常要先做一些事这个对象才能正常使用,也可以说是准备工作,比如给这个对象赋些初始值,或者先运行一些别的方法.这时候就需要一个“构造器”用于: 构造对象 初始化属性这样,把那些在创建时要做的事写在构造方法里,每次创建就会被执行一遍. 我们常见的一种Java格式: public 返回类型 方法名(参数){ } 如: 1 public void s

Eclipse4.7使用基础 显示Hierarchy窗口 选中一个类按F4 显示类的继承层次

os :windows7 x64    jdk:jdk-8u131-windows-x64    ide:Eclipse Oxygen Release (4.7.0) Test类继承HelloWorld类 选中Test类,按F4 窗口出现 Object类是HelloWorld类的父亲,HelloWorld类是Test类的父亲. 在类的继承层次下面的窗口中,你可以看到类中的各种成员.虽然 给最苦现在的境界不够,不经常用这个功能,但是依然可以看出来 这个功能能提供大助力. Java优秀,值得学习.E

python面向对象编程基础II(类的继承)

继承一个类 继承的好处: 1.复用已有代码 2.自动拥有现有类的所有功能 3.只需要编写缺少的功能 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender 定义Student类时,只需要把额外的属性加上,例如score: class Student(Pers

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

继承是类的一个很重要的特性,什么?你连继承都不知道?你是想气死爸爸好继承爸爸的遗产吗?(滑稽) 开个玩笑,这里的继承跟我们现实生活的中继承还是有很大区别的,一个类可以继承另一个类,继承的内容包括属性跟方法,被继承的类被称为父类或者基类,继承的类称为子类或者导出类,在子类中可以调用父类的方法和变量.在java中,只允许单继承,也就是说 一个类最多只能显示地继承于一个父类.但是一个类却可以被多个类继承,也就是说一个类可以拥有多个子类.这就相当于一个人不能有多个父亲一样(滑稽,老王表示不服). 话不多

python2学习------基础语法2(类、类的继承、类成员函数、防御式编程)

1.类的定义以及实例化 # 类定义 class p: """ this is a basic class """ def __init__(self): # 类成员函数需要传入self关键字 """ this is a init function of basic class """ print "this is a init function ... "; def