zoukankan      html  css  js  c++  java
  • C#基础解析之【继承】

    今天和大家探讨C#中面向对象的特性之二---继承

    何为继承?简单的一句话就是:建立类之间的关系,实现代码的重用性,方便系统扩展。说白了就是两个关键点:a.避免代码的冗余,b.进行程序扩展。

    接下来我们进行更进一步的了解继承,继承是面向对象程序设计的主要特征之一,它可以让使代码的重用性大大加强,可以节省程序设计的时间。继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次,比如子类(派生类)可以继承父类(基类) 某些成员,继承和类的成员方法一样,我们也可以定义属性的重载、虚属性、抽象属性以及密封属性的概念。继承的两大特性是传递性和单根性。

    在生活中我们也实现了继承比如:

    我们还是先来看个简单的例子:

    创建父类:

     1 class Dog
    2 {
    3 string type;//类型
    4 public string Type
    5 {
    6 get { return type; }
    7 set { type = value; }
    8 }
    9 int weight;//体重
    10 public int Weight
    11 {
    12 get { return weight; }
    13 set { weight = value; }
    14 }
    15 int height;//高度
    16 public int Height
    17 {
    18 get { return height; }
    19 set { height = value; }
    20 }
    21 public Dog() { }//无参数的构造方法
    22 public Dog(string t, int w, int h)//带参数的构造方法
    23 {
    24 this.type = t;
    25 this.weight = w;
    26 this.height = h;
    27 }
    28 }

    添加Dog的子类

     1 class Collie : Dog//子类
    2 {
    3 public Collie()//无参数的构造方法
    4 {
    5 this.Type = "柯利犬";
    6 this.Weight = 34;
    7 this.Height = 66;
    8 }
    9 public void Act()//方法输出柯利犬的特点
    10 {
    11 Console.WriteLine("性格:温和,活泼,忠实,亲切");
    12 }
    13 }
    14 class SheltlandSheepdog : Dog//子类
    15 {
    16 public SheltlandSheepdog()//无参数的构造方法
    17 {
    18 this.Type = "喜乐蒂";
    19 this.Weight = 18;
    20 this.Height = 30;
    21 }
    22 public void Act()//方法输出喜乐蒂的特点
    23 {
    24 Console.WriteLine("性格:温和而忠实,聪明的犬种");
    25 }
    26 }

    在Main方法中实例化子类对象并调用它们的方法:

     1 static void Main(string[] args)
    2 {
    3 Console.WriteLine("柯利犬的特点");
    4 Collie collie = new Collie();
    5 collie.Act();//调用方法
    6 Console.WriteLine("喜乐蒂的特点");
    7 SheltlandSheepdog sheltlandsheepdog = new SheltlandSheepdog();
    8 sheltlandsheepdog.Act();//调用方法
    9 Console.ReadKey();
    10 }

    运行结果:

    C#

     
    摘要: 今天和大家探讨C#中面向对象的特性之二---继承何为继承?简单的一句话就是:建立类之间的关系,实现代码的重用性,方便系统扩展。说白了就是两个关键点:a.避免代码的冗余,b.进行程序扩展。接下来我们进行更进一步的了解继承,继承是面向对象程序设计的主要特征之一,它可以让使代码的重用性大大加强,可以节省程序设计的时间。继承就是在类之间建立一种相交关系,使得新定义的派生类的实例可以继承已有的基类的特征和能力,而且可以加入新的特性或者是修改已有的特性建立起类的新层次,比如子类(派生类)可以继承父类(基类) 某些成员,继承和类的成员方法一样,我们也可以定义属性的重载、虚属性、抽象属性以及密封属性的概念。继阅读全文
    posted @ 2012-03-29 00:34 青苹果 阅读(250) | 评论 (1) 编辑
     
    摘要: 园友们大家好,今天继续和大家一起探讨一下C#语言中的面向对象特性之一---封装在C#语言中面向对象有三个特性封装、继承、多态。我们首先来简单的理解一下面向对象,所谓面向对象就是应用程序开发中的技巧和概念,主要就是一种设计的思路,简称OOP技术,面向对象的编程语言可以使得复杂的工作条理变的清晰,编写起来也就容易些,它还具有重用性、灵活性和扩展性。但是,说实话如果具体说面向对象还真说不清楚,就好比你问我什么是数学。No.1 面向对象的基础核心是类和对象。所谓类就是具有相同属性和行为的对象的集合。比如说:导演是个类,演员是个类,观众也是一个类,他们都有相同的属性和行为,都是抽象类,都是指一群人。所谓阅读全文
    posted @ 2012-03-10 20:33 青苹果 阅读(721) | 评论 (0) 编辑
     
    摘要: 今天和大家一起来讨论一下C#中的数组和排序。首先,先感谢一下大家的讨论和关注,这无疑是对我本人的最大支持,有了讨论我们才可以发现问题,解决问题,这样我们就可以不断的进步,不断的提升自己。在这里我还想多说两句,在之前的留言中我看到有说我写的文章比较浅,我想和大家解释一下,本人所写的文章都是一些基础中的基础,比较适合新人来研究和学习(本人也是个新手),希望老鸟和高手们给予正确的指点和帮助,因为我们都是一个台阶一个台阶爬上来的。。。好的!我们来进入今天的正题-----数组和排序。今天的内容相对而言不是很多,但是有些东西是比较重要的比如说:冒泡排序,冒泡排序好像在面试的时候问的挺多的!呵呵!还是先来看阅读全文
    posted @ 2012-03-03 19:09 青苹果 阅读(978) | 评论 (9) 编辑
     
    摘要: 今天继续和大家探讨C#,今天我们来聊一聊C#中的循环结构。对于循环结构我想在所有语言中都会看到的!因为循环结构是一个又省时又省力的一个好方法!所以大家用的也比较普遍,接下来我们就一起进入循环结构。在我们登陆QQ时,如果你的密码输入不正确就会一直提示你账号或者密码不正确,这个功能就是使用了循环结构,好的!我们还是来看个控制台程序的例子,我觉得例子是最容易说明问题的方法。 1 class Program 2 { 3 static void Main(string[] args) 4 { 5 Console.Write("登陆账号");...阅读全文
    posted @ 2012-02-25 00:21 青苹果 阅读(1191) | 评论 (17) 编辑
     
    摘要: 今天和大家来分享C#中的运算符和条件结构。在前言中我们已经简单的了解了一下C#语言,大概的知道了C#的基本内容,在今后的解析中我们一步一步的把C#封装到我们的大脑当中,以便以后调用。Ok!我们今天来探讨一下运算符和条件结构,首先,来看一下C#中简单的运算符,说到运算符可能大家想到的就是数学中的加减乘除了,当然在C#中也有加减乘除,当然了可能有的意思和小学数学中有些差异,不过有些还是一模一样的,下面我们来看一下No.1算术运算符:No.2赋值运算符“=”这个可以说在项目中用到的很多,用到的频率也很高,这个赋值运算符的意思就是把“=”右边的赋值给“=”左面,例如:int qingpingguo=2阅读全文
    posted @ 2012-02-17 21:23 青苹果 阅读(910) | 评论 (6) 编辑
     
    摘要: 今天和大家一起分析一下C#语言,作为微软的主打语言,Csharp也非常的深受大家的欢迎,最近几年Csharp的编程排行榜也一直处于上升的趋势,今年更是达到历史新高,从2011年的第六位,直线上升到了今年的第三位。这种上升趋势不仅对微软来说是个好消息,对于.net开发人员来说也是个喜讯。下面我们来看一下各大编程语言前十位的排行。2012年1月编程语言排行榜Top 10 具体榜单:2012年1月编程语言排行榜前十位的长期走势图:当然了排名也只是排名,排名也只能说是大家对于这门语言的喜爱和关注,以及在项目中的运用。至于用什么语言和学什么语言好?我想这个问题是没有准确的答案的,就像在魔兽争霸中你如果问阅读全文
    posted @ 2012-02-12 19:06 青苹果 阅读(1301) | 评论 (12) 

    base关键字

    在继承中base关键字是专门用来继承父类的。在我们运用的时候一般是在重写、覆盖还有构造函数里面来调用父类里面的这个方法时用:base(),这个base好像和JAVA里面的super相似(本人是搞.net的,对JAVA不是很了解)。C#里面和base差不多的还有一个就是this了!其实这两个用起来也很相似,不过还是有区别的,this是指向本身,base是指向父类。就比如说:你在父类里面int n;你在子类里面也int n; 那么此时base.n和this.n表示的就不是同一个变量了,但是如果子类里面没有定义n,那么base.n和this.n就是同一个变量了。

    结合上例base 在带参数的构造方法中的使用

    public qingpingguo(string t,int w,int h):base(t,w,h){}

    我们继续看一下继承的传递性
    派生类是从基类那里继承特性,那么派生类也可以作为其它类的基类。从一个基类派生出来多层类,这样就形成了类层次结构。就好比汽车为基类,然后汽车又分为卡车和公共汽车,那么卡车和公共汽车就是派生类,卡车又可以作为基类派生出小型卡车和重型卡车。简单的说就是子类不仅仅能够继承父类的成员,还继承了父类的父类的成员。我们来看一张图就会明白了:

    继承的单根性
    继承的单根性是指子类只能继承一个父类,不能同时继承多个父类。就好比儿子只能有一个父亲(亲生的),派生类只能从一个类中继承,继承不支持多重继承。这样规定是为了避免代码结构的复杂性。

    最后介绍两个属性:

    一个是抽象属性
    使用abstract 修饰符声明的属性为抽象属性。
    抽象属性的访问器也是虚的,而且没有提供访问器的具体实现。这就要求在非虚的派生类中,由派生类自己通过重载属性来提供对访问器的具体实现。
    abstract 和override 修饰符的同时使用,不但表示属性是抽象的,而且它重载了基类中的虚属性这时属性的访问器也是抽象的。
    抽象属性只允许在抽象类中声明。
    除了同时使用abstract 和override 修饰符这种情况之外,static, virtual, override和abstract 修饰符中任意两个不能再同时出现。
    密封属性
    使用sealed 修饰符声明的属性为密封属性。类的密封属性不允许在派生类中被继承。密封属性的访问器同样也是密封的。
    属性声明时如果有sealed 修饰符,同时也必须要有override 修饰符。

    总结:

      1.了解继承;

      2.base关键字;

      3.继承的传递性;

      4.继承的单根性;

    好啦!今天就到这了!我眼睛都快睁不开了!感觉写的有点仓促,因为有好多东西没有写到!不过还是希望能够对初学者有一些帮助!如果对初学者有点用的话,我觉得今天晚上就没有白费功夫!

    此文是本人的个人观点,如有不完善或者不准确的地方,欢迎高手进行批评,老鸟进行指点。

  • 相关阅读:
    Hibrenate load 和 get
    用 JMX 检测应用程序
    java.lang.Class类
    JAVA方法传递参数:传值?传引用?
    Spring Task Schedule 及多线程
    Spring 3.0 注解
    Spring Batch 文档(中文)
    C#中combobox 控件属性、事件、方法
    LINQ to SQL快速上手 step by step
    C#操作字符串方法总结<转>
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/2422808.html
Copyright © 2011-2022 走看看