zoukankan      html  css  js  c++  java
  • C#基础篇--面向对象(类与对象)

    1.类是什么?

       类就相当于模板,就是把同一类的事物的共同特征进行的抽象。

      类的创建和说明:

        类是先根据一些具体的对象(实体的东西)来抽象出来的共同的特性,然后用代码来表示. 

        在类中,用数据表示事物的状态,用函数(方法)实现事物的行为动作。

        当创建一个类时,系统会默认的添加一个构造函数,如果用户自己写一个构造函数则会覆盖这个默认的构造函数。当然构造函数也是可以重载的。

        构造函数的特点:

      1. 构造函数名必须与类名相同。
      2. 不能有任何的返回值类型。
      3. 访问修饰符一般都是Public.

          如果一个类中有一个构造函数,并且这个构造函数用的Private修饰的,那么这个类是不能实例化的。因为要实例一个类时,必须去调用这个类的构造函数。因此可以写在这个类中写一个静态的方法,在方法中来实例这个类。    

        方法的重写:

              是与参数的个数和参数的类型有关,与返回值没有关系。

       说到了类和方法,那么就有必要的说一下变量的作用域了:  

          是声明这个变量与最近的大括号的内部。

          局部变量必须要先赋值后才能够使用。

          而类的成员变量是可以不用赋值,就可以先使用,因为构造函数是会初始化这个变量的。 

          如果在一个方法中声明了一个与类的成员变量相同的变量,那么在使用时,调用类的成员变量要用this 与之区分开,如果不用this 那么方法中的变量要优先于成员变量。This就是表示当前类的对象。

    2.对象是什么?

      对象就是指某一个具体的事务。在程序中它是类的一个实例。简单的说就是New出来的。

    3.面向对象是什么?

      面向对象是一种分析问题的方式 主要的作用就是增加程序的可扩展性。

        面向对象的优点:

        它能够构建与现实世界相对应的问题模型,并保持他们的结构、关系和行为模式。  

      面向对象的三大特性: 封装、继承、多态。

        封装:  

        就是把事物的状态和行为封装在类中,使用类的人不需要知道类内部是怎么实现的,只要调用其中的属性和方法实现功能就行了。

        在程序中封装具体的实现:

      1.   属性封装了字段。
      2.   将多个方法封装成一个对象。
      3.   将一堆代码封装到一个方法中。
      4.   将一些功能封装到了几个类中。
      5.   将一些具有相同功能的代码封装到一个程序集中(dll 、exe),并且对外提供统一的访问接口。(例:公司的每个部门的部门经理,与其他部门协作。)

        继承:

         它是指类与类之间的关系,并且类是不能相互继承的。如果一个类没有显示继承自任何一个类,默认是继承Object(Object类是所有类的的父类)。如果显示指定了当前类的继承自某个类,则将覆盖默认的Object类。    

        继承的优点 :

      1.   代码的重用
      2.   多态(里氏替换原则LSP)(程序的可扩展性、灵活性),下面说明
      3.      子类继承父类的属性、方法、字段,使创建子类变得很简单,实瑞了代码的重用,和多态。但要记的子类只能继承父类中非私有的东西。

        继承后关于构造函数的问题:      

          1.类的构造函数是不能被继承的。只能在子类中去调用父类的构造函数。

          2.子类的构造函数会默认去调用父类中的无参数的构造函数,当然也可以自己来设置调用父类的哪一个构造函数。

                        (1)当在父类中写了带参的构造函数,记的要再增加一个无参的构造函数,(这也说明构造函数是可以重载的。)因为当自己在类中写了构造函数会覆盖系统默认的构造函数。

                        (2)当然也可以在子类的构造函数加上:base(父类构造函数要传的参数),这样就是调用父类中带参数的构造函数了。

          3.在当前类的构造函数中去也可以去调用当前类的另一个构造方法。用:this(参数),这样可以少写构造函数里的内容了。

          注意:在构造函数中如果用this()就不能再用:base(),相反也是一样的。

        

          当调用从父类中继承过来的成员的时候,如果子类没有重写则this.成员与base.成员是没有区别的。如果子类重写了父类成员,则this.成员,调用的是子类重写以后的。Base.成员,调用的依然是父类的成员。      

          类的单根继承性:一个子类只能继承一个父类。

          类的传递性:子类继承父类的方法和属性等,同时还继承了父类的父类的属性和方法。

          重要的特性: 父类对象可以引用子类实例,它编译的是父类对象,但运行却是一个子类对象。具体特征:

                       被声明为父类对象,拥有父类的属性等,占用子类的内存空间,子类方法覆盖父类的方法时,此时对象调用的是子类的方法;否则自动调用继承父类的方法,也就是说父类不能去调用子类中独有的成员。      

          关于父类中私有成员是否被继承的问题

          个人观点:所有私有成员没有被继承。是指没有办法去访问,并不代表内存中不存在。

          例如:儿子继承了父亲的一千万,但不能花。 

          访问级别的问题:(儿子能去的地方爹一定要能去)

                       子类的访问级别必须比父类的级别要低或相同。

                       当前类中的成员的访问级别不能比所对应的类型访问级别高(包括方法的参数。)

          

        多态:

         多态就是多种表现的形态, 具体的是指不同对象收到相同消息时,会产生不同行为,同一个类在不同的场合下表现出不同的行为特征。    

         实现多态的主要手段: 1.虚方法virtual, 2抽象方法Abstract 3接口。

          虚方法使用:

        1.     虚方法必须有方法体,当然方法体中可以不写内容
        2.     子类继承父类,其实父类的虚方法可以重写,也可以不重写。
        3.     虚方法可以写在普通类中

         

          虚方法与抽象方法的区别:

            1.虚方法必须有方法体,抽象方法不能有方法体。

            2.抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中也可以在普通类中声明。

            3.抽象方法必须在子类中重写,虚方法可以被重写,也可以不重写。

        

        多态的作用:
          把不同的子类对象当作父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需求的不断变化。

        多态的含义:
          使得能够利用基类的指针来引用不同子类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作。

        总结的说多态的意义就是为了程序可扩展性,并且节省成本和提高效率。  

    每一天都是崭新的,我们的目标有多远,我们就能走多远,坚持!!
  • 相关阅读:
    第八章 多线程编程
    Linked List Cycle II
    Swap Nodes in Pairs
    Container With Most Water
    Best Time to Buy and Sell Stock III
    Best Time to Buy and Sell Stock II
    Linked List Cycle
    4Sum
    3Sum
    Integer to Roman
  • 原文地址:https://www.cnblogs.com/xiao-feng/p/xiaofengCSharp.html
Copyright © 2011-2022 走看看