Java中的面向对象

面向对象是最接近人思维的一种方式,也是Java的核心,需要通过不断学习去进行深入理解,主要内容:封装,继承,多态

                                                    --------世间万物皆对象


  类是对具有相同特征事物的抽象,表示一类事物。类可以看做是一个模版,或者图纸,系统根据类的定义来造出对象。类是用于描述同一类型的对象的一个抽象概念,类中定义了这一类对象所应具有的共同的属性、方法。是一般情况

  • 对象

  对象是类的具体实现,是特殊情况
  对象说白了也是一种数据结构(对数据的管理模式),将数据和数据的行为放到了一起。
  对象的本质就一种数据的组织方式
  在内存上,对象就是一个内存块,存放了相关的数据集合!

  • 属性

  属性用于定义该类或该类对象包含的数据或者说静态特征。属性作用范围是整个类体。
  在定义成员变量时可以对其初始化,如果不对其初始化,Java 使用默认的值对其初始化。Java的属性也称为变量,变量的本质就是一个可操作的存储空间,空间的位置是确定的,但是里面存放什么值是不确定的,可以由我们自己来确定。
  变量的分类

  • 局部变量:方法或者语句块中声明的
  • 成员变量:方法外类里面
  • 静态变量:方法外类里面同时static修饰的
    在这里插入图片描述常量
    常量通常是指一个固定不变的值,在Java中使用final修饰一个常量,一旦被初始化不能改变其值
    在这里插入图片描述
  • 方法

  方 法 用 于 定 义 该 类 或 该 类 实 例 的 行 为 特 征 和 功 能 实 现 (完成特定功能的代码片段)。 方 法 是 类 和 对 象 行 为 特 征 的 抽象或者说是数据的动态特征

  • 面向过程和面向对象区别

  根本区别:面向过程,执行者思维;面向对象,设计者思维
  1、面向对象:适用于比较复杂的事物,需用很多人完成的工作eg:造车
  2、面向过程:适合于比较简单的、不需要协作的事务eg:开车
  3、解决复杂问题,面向对象宏观上进行把握,微观处理上仍然是面向过程的
  4、量变引起质变,不同的数量级必然采用不同的数据管理模式
 (1、数据无管理时代—两个人一个公司,身兼数职
  2、数组管理和企业部门制—公司有好多部门,各司其职,同类型的在一个部门
  3、对象和企业项目制—一个项目一个集体,高度集成这个项目专门的公司,麻雀虽小,五脏俱全)

  • 面向对象的三大特征

  • 封装
    ★它指的是将对象的状态信息隐藏在对象内部,不允许外部程序直接访问对象内部信息,而是通过该类提供的方法来实现对内部信息的操作和访问。可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。(实现”高内聚,低耦合“)

  

 

  关于protect两个细节:

  1.若父类和子类在同一个包中,子类可访问父类的protectd的成员,也可以访问父类对象的protectd成员

 

  2.若父类和子类不在同一个包中,子类可以访问父类的protectd的成员,但是不可以访问父类对象的protectd成员

 

 

 

  • 继承
    ★基于某个父类的扩展,子类可以继承父类的所有属性和方法(父类构造方法除外,获得了除构造方法以外的全部属性和方法,但是不可以访问父类的私有属性和方法),也可以增加父类不具备的属性和方法。或者直接重写父类的某些方法。让一个类继承另一个类需要用extends关键字

    与继承类似的有一个组合,就是不用继承,直接在类中new 另一个类的对象,从而使用类中的属性和方法,一般如果是is-a 关系的时候使用继承,如果是has-a 关系的时候使用组合

  • 多态
    ★多态就是同一操作(方法)作用于不同的对象时,可以有不同的解释,产生不同的执行结果。
    方法的重载就是类的多态性

  重载 与 重写 的区别
  方法重载:是指同一个类中的多个方法具有相同的名字,但这些方法具有不同的参数列表,返回类型不需要一致 。

  重写的要素(“== ”“<=”“>=”)

  方法名,形参列表相同

  返回值类型和声明异常类型,子类小于父类

  访问权限,子类大于父类
  不构成重载的三种情况
  如果参数顺序不同不构成重载;
  只有形参的名称不同,不构成方法的重载;
  只有返回值不同不构成方法的重载。
  方法重写:是存在子父类之间的,子类定义的方法与父类中的方法具有相同的方法名字,相同的参数表和相同的返回类型 。在继承中,如果子类和父类成员方法重名,访问规则:创建的对象是谁就优先用谁,没有则向上找
  注意事项:无论是成员变量还是成员方法,如果没有都是向上找父类,绝不可能向下找子类

  • 构造器(构造方法)

  • 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能 在构造器里使用 return 返回某个值
  • 构造器的方法名称必须和类名相同
  • 构造方法第一句总是:super(...)来调用父类对应的构造器,如果不写,默认调用父类的无参构造器
  • 调用构造方法,也要进行溯源,即先向上追溯到Object,然后再一次向下执行类的初始化块和构造方法,直到当前子类为止。
    创造一个对象的四个步骤:
  • 分配对象空间,并将对象成员变量初始化为 0 或空
  • 执行属性值的显式初始化
  • 执行构造方法
  • 返回对象的地址给相关的变量

 

  • 继承属追溯问题

 

 

  属性方法查找顺序:(比如:查找变量i)

  查找当前类中有没有属性i

  依次上溯每个父类,查看每个父类中是否有i,知道Object

  如果没有找到,则出现编译错误

  上面步骤,如果找到i变量,则这个过程终止

  构造方法和静态初始化块也按照追溯进行

    构造方法第一句总是:super(...)来调用父类对应的构造器,如果不写,默认调用父类的无参构造器

    调用构造方法,也要进行溯源,即先向上追溯到Object,然后再一次向下执行类的初始化块和构造方法,直到当前子类为止。

 

 

 

posted @ 2021-12-03 20:47  (HelloWorld!)  阅读(59)  评论(0)    收藏  举报