• 面向对象(基础oop)之属性与构造函数


        大家好,我叫李京阳,,很高兴认识大家,之所以我想开一个自己的博客,就是来把自己所了解的知识点通过自己的话写一下,希望被博客园的朋友们点评和一起讨论一下,也希望从博客园中多认识一些软件开发人员!现在我开始讲一下面向对象的一点知识,请你们多多点评和讨论!!


                  需要记得:1.在1个项目中 不能 直接访问 另外的1个项目中的类.
                  2.在为对象的字段赋值的时候.语法上只要赋值的数据和字段的类型一致就可以.但是绝大多数情况下.还要考虑实际情理.
                     比如:
                     人对象的age字段 表示1个人的年龄 是int类型
                     语法上只要是1个int类型的数据都可以赋值.
                     但是情理上. 人对象的age 0-130岁.
                     
                  3. 为了情理,我们有以下的需求
                     为对象的字段赋值的时候 要求这个值 符合情理. 而不是仅仅满足语法.
                     这个需求是写类的那个人的需求 而不是创建对象的那个人的需求.
                     解决方案:
                     a. 目的: 当外界为对象的字段赋值的时候.可以对这个值做1个逻辑验证.
                     b. 步骤
                         1). 要保护的字段必须私有化. 因为一旦public 那么外界就可以直接访问这个字段.
                             就可以直接为这个赋值,无法阻拦.
                             
                         2). 但是一旦私有化,外部1点机会都没有.
                             那么我们在类中提供1个为被保护的字段赋值的方法. SetXX()
                             这个方法接收1个参数,这个参数就是外界要赋值给字段的值.
                             在方法的内部 对这个值进行逻辑验证. 符合逻辑就将值赋值给字段.
                             不符合逻辑 我们就做默认处理.
                         3). 在外界如果要为对象的字段.需要调用这个方法才可以为字段赋值.
                         
                         4). 外界如果想要得到保护的字段的值,那么再写1个GetXX方法 用于专门返回被保护的字段的值
                             外界通过调用这个方法 得到字段的值.
                     
                     c. set 设置
                      get 得到.
     
                     d. 有同学犯错:
                        1). 被保护的字段一定要私有化.
                        2). 在赋值的方法中.是要判断用户准备赋值给字段的数据是否符合规范. 而不是判断字段的值.
                 
                     
                  4. 在方法中可以定义1个局部变量的名称和成员变量的名称相同 这是可以滴.
                     为什么? 因为成员变量跟随着对象一起开辟在堆空间中.
                             而局部变量 在方法被调用的时候 开辟在栈空间中
                             他们就算同名 1个在堆 1个在栈 是不会有任何影响的.
                             
                     如果在方法中直接访问这个同名成员成员的值 那么访问的是局部变量的值.
                     如果我们就是要访问这个同名的成员变量. 这个时候可以通过this关键字来点出这个同名成员.
                     
                     this代表:当前对象. this所在的方法属于哪个对象,那么this就代表这个对象.
                     
                 
                     总结:
                       1. 当方法中有1个局部变量的名称和字段的名称相同.如果我们要访问字段.必须加上this
                       2. 其他情况下: 写不写this关键字 指的都是字段.
                          但是建议: 在方法中如果我们访问的是对象的成员 建议加上this 方便代码的阅读
     
     
                      为什么要保护字段??
                      希望对对象的字段赋值,赋值的这个数据在情理范围之内。
     
                     使用方法保护字段.
                      a. 将被保护的字段私有化.
                      b. 提供1个Set方法 专门用于为被保护的字段赋值.
                         在这个方法中验证 赋值 的数据是否符合规范.
                         如果符合就赋值 如果不符合做默认处理.
                      c. 再提供1个Get方法 专门用于返回被保护的字段的值.
     
     
                      1.属性
                     作用:和GET,SET方法一样的,是用来保护字段,只不过属性的语法更简洁。
     
                      2.属性的语法:
                       访问修饰符 属性的类型 属性的名称
                       {
                         get{}
                         set{}
                       }
     
                     3.如何操作?
                     可以向操作字段那样,通过赋值符号直接赋值,或者直接写上属性取值。

    1.构造函数/构造方法 : 构造函数是一个特殊的方法。
     
    2.构造函数的语法:
        a.访问修饰符大都数情况下是public。
        b.构造函数没有返回值,连void都不要写。
        c.构造函数的名称与所在的类的名称一致。
     
    3.方法的特点在于,如果方法不调用,那么方法中的代码不会被执行。
       构造函数不能被程序猿手动调用。
      
       我们发现,在创建对象的时候,后面有一个小括弧。
        小括弧的作用:
         a.改变运算的优先级
         b.定义方法
         c.调用方法
         d.强制类型转换
         e.调用构造函数
     
    总结:构造函数在创建虽然不能直接调用,可是可以通过NEW关键字自动调用。
     
    4.注意:
       a.构造函数的名称一定是与所在的类的类名相同。
       b.构造函数与普通的方法的区别
           1)语法上的区别
           2)执行时机
     
    5.构造函数其实就是一个特殊的方法
       特殊的地方
       1)语法上的特殊
       2)执行时机的特殊
     
    6.普通的方法可以带参数,构造函数也是可以带参数的。
       在创建对象的时候,后面的小括弧是在调用对象的构造函数,必须在小括弧中为构造函数定义参数。
       在创建对象的时候,必须要调用构造函数。
     
    7.构造函数是可以重载的,这就意味着在对象中可以加载多个方法。
       
    8.构造函数的作用:
       特点:在于创建对象的时候自动调用。
       作用:如果我们有一段代码希望在创建对象的同时就执行,那么我们就可以将这段代码放在构造函数中。
                但是,一般情况下,不建议在构造函数中写一些特别消耗时间和性能的代码。
       绝大多数情况下,程序员使用构造函数来初始化当前的属性的值。
     
    9.如果我们没有写构造函数,那么C#编译器在编译的时候,会自动的为这个类生成一个无参数的,空方法体的构造函数。
       所以我们这个时候才可以调用无参数的构造函数来创建对象。
       编译器自动生成的这个无参数的构造函数来创建对象。
       编译器自动生成的这个无参数的构造函数,我们就把它称为“隐式构造函数”;
       一旦程序员为这个类写了一个构造函数,那么编译器就不会自动生成  “隐式构造函数”了。
       如果就是希望存在哪个无参数,,那么就需要重新创建一个构造函数。
     
    10.构造函数式不能被程序员手动调用,在普通的方法不能调用构造函数,但构造函数可以调用普通的方法。
         
         构造函数之间可以相互调用
     
     
     

  • 相关阅读:
    luogu CF804D Expected diameter of a tree |Tarjan+樹的直徑+前綴和+二分查找
    luogu CF25C Roads in Berland |最短路floyd
    自觉日志·1·再现曾经的自觉
    祝福您新年快乐!
    自觉体验十一 体验祝福,与弘誓大愿!
    自觉体验 十 体验失忆
    自觉体验 六 手语与结印
    自觉体验 一  闲来无事,闭目养神
    我将离开屏幕前的“      ”
    第五章  自觉与【转载】《大念处经》
  • 原文地址:https://www.cnblogs.com/lijingyang/p/3761960.html
Copyright © 2020-2023  润新知