`
zhangziyangup
  • 浏览: 1078199 次
文章分类
社区版块
存档分类
最新评论

C#基础知识整理:基础知识(4) 继承

 
阅读更多

前面提到过,面向对象的三大特性:封装性、继承性和多态性。封装在前面类的定义里也了解的差不多透彻了,现在看看继承的特性。
继承实际是一个类对另一个类的扩展,后者称之为基类,前者称之为子类。继承就是子类拥有基类的一切属性和方法,子类还可以增加属性和方法。但是子类不能去掉父类的属性和方法。
当然这里还要提到修饰符的问题,子类拥有基类的所有属性和方法,不意味着子类可以任意访问继承的这些属性和方法。子类只能访问到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#中的数据类型、去处符、类、接口、多态、继承、重载、流程控制、命名规则等基础知识进行了精炼的总结归纳,肯定对你有用的。

    C#基础教程,全部幻灯片PPT。共16章

    C#基础教程,全部幻灯片PPT。共16章 是C#知识点全面,系统,是初学者很好的基础教程, 也是C#讲师的一个很好教案。 需要者请到网站下载: http://download.csdn.net/user/QQ223857666 第1章 程序设计语言与程序设计...

    北大青鸟S2 C#课件

    第三章节:C# 基础知识 第四章节:在 C# 中实现 OOP 概念 第五章节:C# 中的继承 第六章节:属性、索引器、委托和事件 第七章节:WinForms基础知识 第八章节:WinForms控件 第九章节:调试、测试和异常处理 第十章节:多...

    c#入门基础知识word版

    c#入门基础知识必备 内容目录: 1、合集1net体系 2、合集2c#基础 3、合集3对象和类型 4、合集4继承 5、合集5数组 6、合集6运算符和类型转换 7、合集7委托和事件 8、合集8字符串和正则表达式 9、合集9泛型 10、合集10...

    C#完成编程手册(基础知识)

    1、C#语言概述 2、C#编程基础 3、面向对象的C#:类、方法、域和属性、事件和索引指示器、继承 4、深入了解C#编程:接口、文件操作、组织应用程序、高级应用

    C#学习(基础知识,OOP概念,继承等)

    里面包含了C#的一些基础知识,有利于初学者对C#这一块的知识有一个很好的了解。

    广工C#实验,实践C#语言基础知识及控制台应用程序开发,

    (2) 实践C#语言基础知识及控制台应用程序开发 (3) 掌握Visual C#.NET类的创建(成员,方法,属性),类的继承,类的多态性及类的方法的重载。 1.3 实验内容 题目: 基于控制台应用程序,设计一个二叉树的实验工具,...

    c#基础学习电子档 全书

    c#0基础学习书籍 电子档 第1章 Visual C# 2008初步 第2章 C#编程必备知识 第3章 C#编程必备知识(二) 第4章 用面向对象的方法 第5章 父子关系—继承 第6章 索引器、委托和事件 第7章 调试、测试和异常处理 第8章 用...

    C#开发实例大全(基础卷)

    《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。《C#开发实例大全(基础...

    深入剖析C#继承机制

    一、继承基础知识 二、C#的继承规则 三. 访问与隐藏基类成员 四、多级继承 五、继承与访问修饰符

    C#电子教案

    C#电子教案PPT 第1讲:C#概述 第2讲:第一个Windows应用程序和Web...第51讲:SQL Server数据库基础知识 第52讲:XML编程 第53讲:数据绑定技术 第54讲:文件和注册表操作 第55讲:多线程和同步 第56讲:文章发布系统

    C#语言教程-介绍C#语言的基础知识、语法和常用的编程技巧,帮助初学者快速入门

    本教程介绍了C#语言的基础知识、语法和常用的编程技巧。C#是一种面向对象的编程语言,支持多种数据类型、运算符、条件语句和循环语句。在C#中,类和对象是编程的基本单位,继承和接口是面向对象编程的重要概念。此外...

    C# 2008程序设计实践教程 光盘

    全书共分14章,内容包括.NET Framework 3.5简介,C#编程基础知识,C#对象和类型,面向对象中的两个重要特性:继承和多态,数组知识,类型转换的使用,C#的字符串和正则表达式,集合的使用,try/catch块、throw子句、...

    《C#开发实例大全(基础卷)》软件开发技术联盟

    《C#开发实例大全(基础卷)》筛选、汇集了C#开发从基础知识到高级应用各个层面约600个实例及源代码,每个实例都按实例说明、关键技术、设计过程、详尽注释、秘笈心法的顺序进行了分析解读。《C#开发实例大全(基础...

    C# mvc4加存储过程加easyUI-DataGrid开发的数据分页Demo

    0.html基础知识 1.继承 2.泛型 3.存储过程 4.反射 5.特性 6.Jquery Easy-UI DataGrid的使用 7.jquery 的ajax 示例数据库表和存储过程在MyMVC.WebUI\App_Data文件夹里。数据库自己创建,创建完修改web.config文件里...

    Visual C#学习笔记光盘

    本书由浅入深地讲解Visual C# 2005编程知识,全书内容分为6篇,共27章,第一篇介绍Visual Studio 2005开发环境和C#基础,其中包括Visual C# 2005简介,C#语言基础,面向对象编程基础,数组类和集合类,继承,...

    C#程序设计

    在本书中,著名的技术作家Jesse Liberty以一种最适合有经验的程序员口味的方式--紧扣Microsoft全新.NET平台的大背景本书的第一部分介绍了C#的基础知识,进而阐释了以下内容:类与对象、继承与多态、操作符重载、...

    开发专家·编程大讲坛:C#核心开发技术从入门到精通.tag.pdf

    依次讲解了C#开发基础、搭建C#开发环境、变量与常量、复杂的变量类型和.NET...继承与多态基础、接口和类转换、C#字符串和正则表达式、C#委托和事件、C#泛型、C#文件操作和流文件操作、XML文件操作处理、C#的Windows编程...

    Visual C# 2010程序设计教程(教程PPT+源代码)

     《高等学校计算机应用规划教材:Visual C# 2010程序设计教程》详细介绍了Visual C# 2010程序设计的基础知识、基本方法和应用技巧,共分14章,主要内容包括.NET平台与Visual Studio 2010开发环境、C#语言基础及面向...

Global site tag (gtag.js) - Google Analytics