zoukankan      html  css  js  c++  java
  • 面向对象(类,封装,this,构造方法)

    无论面向对象还是面向过程, 这俩都是解决问题的思路而已, 只是角度不同.

    面向过程:

    强调解决问题的每一个步骤都亲力亲为,每一个细节都自己手动实现.


    面向对象:

    使用特定功能对象去解决特定的问题, 每一个细节不需要关注,只需要创建对应的对象即可.


    面向对象是基于面向过程的

    类和对象及他们的关系
    类: 具有相同特征和行为(功能)的事物的统称 , 是一个抽象概念
    对象: 这类事物中某个确定的个体


    类和对象的关系
    一个类可以创建多个对象 , 类是对象的抽象, 对象是类的实例.

    描述一个事物----> 类

    特征----> 成员属性(成员变量) 
    行为(功能)---> 成员方法

    类的创建格式:
    修饰符 class 类名{

    数据类型 成员变量名1;
    数据类型 成员变量名2;
    数据类型 成员变量名3;
    ...

    成员方法1;
    成员方法2;
    成员方法3;
    ...
    }

    修饰符: public
    类名: 标识符 见名知意
    成员变量列表: 事物的特征 ,只写当前场景关注的特征,没必要把事物的所有特征全都写上 . 写法类似于定义变量
    成员方法: 事物的行为(功能) 只写当前场景关注的行为(特征) 写法上类似于之前的定义方法, 区别在于此时写的话要去掉static

    当一个类第一次使用的时候要载入到方法区 , 后续每一次再使用这个类 就不需要重复载入

    成员变量和局部变量区别
    1.定义的位置不同
    局部变量: 定义在方法的内部
    成员变量: 定义在类的内部, 方法的外部
    2.在内存中的存放位置不同
    局部变量: 局部变量存放在 栈区
    成员变量: 成员变量存放在 堆区
    3.生命周期不同
    局部变量: 随着方法的调用而产生,随着方法的结束而消失 相对较短
    成员变量: 随着对象创建而产生,随着对象数据回收而消失 相对较长
    4.初始值不同
    局部变量: 没有初始值, 使用之前必须进行赋值
    成员变量: 有初始值, 引用类型 null, 整数 0 , 小数0.0 字符:空格, 布尔 false

    封装性
    封装是 面向对象的三大特征之一, 另外两个是继承 多态

    类名:Person
    属性:name ,age
    方法:展示

    封装好处: 提高程序的安全性

    对属性封装的步骤:
    1.使用private关键字修饰对应的属性 , 防止外界通过对象名.属性的方式直接访问属性
    2.书写对应属性的set和get方法 , 给外界一个访问属性的通道

    封装是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。
    封装的原则:
    将不需要对外提供的内容都隐藏起来。
    把属性隐藏,提供公共方法对其访问。
    成员变量private,提供对应的getXxx()/setXxx()方法

    好处:
    通过方法来控制成员变量的操作,提高了代码的安全性
    把代码用方法进行封装,提高了代码的复用性

    变量访问的就近原则:
    当出现多个重名变量的时候, 目标代码使用的是离这行代码最近的那个变量

    this可以解决的问题:
    当局部变量和成员变量重名的时候, 想在特定的代码处访问成员变量, 就可以在目标行的变量名前面加this.
    this只的是当前调用这个方法的对象
    this 谁调用指的就是谁

    构造方法
    是一个方法. 作用: 给对象的数据赋值默认值

    定义格式:
    修饰符 方法名(参数列表){

    若干条初始化语句

    }
    修饰符: public
    方法名: 直接写类名
    参数列表: 跟之前定义方法写形式参数一致
    注意 构造方法 没有返回值类型

    如果我们自己不手动写无参数的构造方法, 系统会默认提供一个,如果我们自己手动书写了无参的构造方法,
    那系统就不会给提供,使用的时候直接使用我们自己写的构造方法

    构造方法 也是方法 也可以进行重载

    但凡我们手写了任意的构造方法, 系统就都不会给提供无参构造方法了 ,
    当此时非要用无参的构造方法创建对象的时候, 必须自己手写无参的构造方法

  • 相关阅读:
    Java 开发 gRPC 服务和客户端
    Springcloud中的region和zone的使用
    Spring Boot中使用AOP记录请求日志
    JDK1.8中的Lambda表达式和Stream
    机器学习之SVM
    机器学习之决策树
    【iOS开发】emoji表情的输入思路
    block为什么要用copy,runtime的简单使用
    swift和oc混编
    iOS之AFN错误代码1016(Error Domain=com.alamofire.error.serialization.response Code=-1016 "Request failed: unacceptable)
  • 原文地址:https://www.cnblogs.com/caigq/p/6965420.html
Copyright © 2011-2022 走看看