前面提到过,面向对象的三大特性:封装性、继承性和多态性。封装在前面类的定义里也了解的差不多透彻了,现在看看继承的特性。
继承实际是一个类对另一个类的扩展,后者称之为基类,前者称之为子类。继承就是子类拥有基类的一切属性和方法,子类还可以增加属性和方法。但是子类不能去掉父类的属性和方法。
当然这里还要提到修饰符的问题,子类拥有基类的所有属性和方法,不意味着子类可以任意访问继承的这些属性和方法。子类只能访问到public和protected修饰的属性和方法,其余无法直接访问。还有一个就是static的属性和方法是不能被继承下来的,因为静态类型之和类有关系与对象无关。
看代码:
using System;
namespace YYS.CSharpStudy.MainConsole
{
public class YSchool
{
private int id = 0;
private string name = string.Empty;
public int ID
{
get
{
return this.id;
}
}
public string Name
{
get
{
return name;
}
}
/// <summary>
/// 构造器
/// </summary>
public YSchool()
{
this.id = 0;
this.name = @"清华大学附中";
}
/// <summary>
/// 构造器
/// </summary>
public YSchool(int id, string name)
{
this.id = id;
this.name = name;
}
/// <summary>
/// 构造器
/// </summary>
public YSchool(int id)
{
this.id = id;
this.name = @"陕师大附中";
}
}
public class YTeacher
{
private int id = 0;
private string name = string.Empty;
private YSchool school = null;
private string introDuction = string.Empty;
private string imagePath = string.Empty;
/// <summary>
/// 使用只读属性,因为是固有属性。
/// </summary>
public int ID
{
get
{
return id;
}
}
public string Name
{
get
{
return name;
}
}
/// <summary>
/// 这几个使用get/set属性,因为这几个属性不是固有的,可以随着某些条件改变的。
/// </summary>
public YSchool School
{
get
{
if (school == null)
{
school = new YSchool();
}
return school;
}
set
{
school = value;
}
}
public string IntroDuction
{
get
{
return introDuction;
}
set
{
introDuction = value;
}
}
public string ImagePath
{
get
{
return imagePath;
}
set
{
imagePath = value;
}
}
public YTeacher(int id, string name)
{
this.id = id;
this.name = name;
}
/// <summary>
/// 给学生讲课的方法
/// </summary>
public void ToTeachStudents()
{
Console.WriteLine(string.Format(@"{0} 老师教育同学们: Good Good Study,Day Day Up!", this.name));
}
/// <summary>
/// 惩罚犯错误学生的方法
/// </summary>
/// <param name="punishmentContent"></param>
public void PunishmentStudents(string punishmentContent)
{
Console.WriteLine(string.Format(@"{0} 的{1} 老师让犯错误的学生 {2}。", this.School.Name, this.name, punishmentContent));
}
}
/// <summary>
/// 男性老师,继承自YTeacher
/// </summary>
public class MrTeacher : YTeacher
{
/// <summary>
/// 构造器,这里要注意,YTeacher是没有提供默认构造器的,
/// 所以子类必须要有构造器,并且和基类参数列表一致。
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
public MrTeacher(int id, string name)
: base(id, name)
{
}
/// <summary>
/// 扩展的方法,刮胡子方法。
/// </summary>
public void Shave()
{
Console.WriteLine(string.Format(@"{0} 老师用飞科剃须刀刮胡子。",this.Name));
}
}
/// <summary>
/// 女性老师,继承自YTeacher
/// </summary>
public class MisTeacher : YTeacher
{
/// <summary>
/// 构造函数
/// </summary>
/// <param name="id"></param>
/// <param name="name"></param>
public MisTeacher(int id, string name)
: base(id, name)
{
}
/// <summary>
/// 扩展方法,护肤的方法
/// </summary>
public void SkinCare()
{
Console.WriteLine(string.Format(@"{0} 老师用香奈儿护肤霜护肤。",this.Name));
}
}
}
using System;
namespace YYS.CSharpStudy.MainConsole
{
class Program
{
static void Main(string[] args)
{
MrTeacher mrTeacher = new MrTeacher(1, @"牛轰轰");
mrTeacher.ToTeachStudents();
mrTeacher.PunishmentStudents(@"背唐诗");
mrTeacher.Shave();
MisTeacher misTeacher = new MisTeacher(2, @"郝漂靓");
misTeacher.ToTeachStudents();
misTeacher.PunishmentStudents(@"默写红楼梦");
misTeacher.SkinCare();
Console.ReadKey();
}
}
结果:
继承是面向对象的特性,它的好处是:
第一、做项目设计类时,继承可以让我们省略量代码;
第二、符合面向对象中类的组织形式,在C#、java等高级面向对象语言中,都有一个object类,这是所有类的祖宗类,其他类都有他派生而来。
继承需要注意一点,就是子类的构造器问题。程序运行过程是子类首先调用父类的构造器。如果子类没有写构造器,那么就会调用父类的默认构造器。如果父类没有默认的构造器,即父类写了带参数的构造器,那么子类也就调用带参数的那个构造器,不过需要指明是调用的哪个带参数的构造器(见代码中base)。
代码下载:http://download.csdn.net/detail/yysyangyangyangshan/4391740
分享到:
相关推荐
对于C#中的数据类型、去处符、类、接口、多态、继承、重载、流程控制、命名规则等基础知识进行了精炼的总结归纳,肯定对你有用的。
C#基础教程,全部幻灯片PPT。共16章 是C#知识点全面,系统,是初学者很好的基础教程, 也是C#讲师的一个很好教案。 需要者请到网站下载: http://download.csdn.net/user/QQ223857666 第1章 程序设计语言与程序设计...
第三章节:C# 基础知识 第四章节:在 C# 中实现 OOP 概念 第五章节:C# 中的继承 第六章节:属性、索引器、委托和事件 第七章节:WinForms基础知识 第八章节:WinForms控件 第九章节:调试、测试和异常处理 第十章节:多...
c#入门基础知识必备 内容目录: 1、合集1net体系 2、合集2c#基础 3、合集3对象和类型 4、合集4继承 5、合集5数组 6、合集6运算符和类型转换 7、合集7委托和事件 8、合集8字符串和正则表达式 9、合集9泛型 10、合集10...
1、C#语言概述 2、C#编程基础 3、面向对象的C#:类、方法、域和属性、事件和索引指示器、继承 4、深入了解C#编程:接口、文件操作、组织应用程序、高级应用
里面包含了C#的一些基础知识,有利于初学者对C#这一块的知识有一个很好的了解。
(2) 实践C#语言基础知识及控制台应用程序开发 (3) 掌握Visual C#.NET类的创建(成员,方法,属性),类的继承,类的多态性及类的方法的重载。 1.3 实验内容 题目: 基于控制台应用程序,设计一个二叉树的实验工具,...
c#0基础学习书籍 电子档 第1章 Visual C# 2008初步 第2章 C#编程必备知识 第3章 C#编程必备知识(二) 第4章 用面向对象的方法 第5章 父子关系—继承 第6章 索引器、委托和事件 第7章 调试、测试和异常处理 第8章 用...
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。《C#开发实例大全(基础...
一、继承基础知识 二、C#的继承规则 三. 访问与隐藏基类成员 四、多级继承 五、继承与访问修饰符
C#电子教案PPT 第1讲:C#概述 第2讲:第一个Windows应用程序和Web...第51讲:SQL Server数据库基础知识 第52讲:XML编程 第53讲:数据绑定技术 第54讲:文件和注册表操作 第55讲:多线程和同步 第56讲:文章发布系统
本教程介绍了C#语言的基础知识、语法和常用的编程技巧。C#是一种面向对象的编程语言,支持多种数据类型、运算符、条件语句和循环语句。在C#中,类和对象是编程的基本单位,继承和接口是面向对象编程的重要概念。此外...
全书共分14章,内容包括.NET Framework 3.5简介,C#编程基础知识,C#对象和类型,面向对象中的两个重要特性:继承和多态,数组知识,类型转换的使用,C#的字符串和正则表达式,集合的使用,try/catch块、throw子句、...
《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。《C#开发实例大全(基础...
0.html基础知识 1.继承 2.泛型 3.存储过程 4.反射 5.特性 6.Jquery Easy-UI DataGrid的使用 7.jquery 的ajax 示例数据库表和存储过程在MyMVC.WebUI\App_Data文件夹里。数据库自己创建,创建完修改web.config文件里...
本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程基础,数组类和集合类,继承,...
在本书中,著名的技术作家Jesse Liberty以一种最适合有经验的程序员口味的方式--紧扣Microsoft全新.NET平台的大背景本书的第一部分介绍了C#的基础知识,进而阐释了以下内容:类与对象、继承与多态、操作符重载、...
依次讲解了C#开发基础、搭建C#开发环境、变量与常量、复杂的变量类型和.NET...继承与多态基础、接口和类转换、C#字符串和正则表达式、C#委托和事件、C#泛型、C#文件操作和流文件操作、XML文件操作处理、C#的Windows编程...
《高等学校计算机应用规划教材:Visual C# 2010程序设计教程》详细介绍了Visual C# 2010程序设计的基础知识、基本方法和应用技巧,共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向...