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,然后再一次向下执行类的初始化块和构造方法,直到当前子类为止。
本文来自博客园,作者:(HelloWorld!),转载请注明原文链接:https://www.cnblogs.com/Simon-s/articles/15636635.html --有志者,事竟成

常量
浙公网安备 33010602011771号