目录
面向对象与面向过程
面向对象:
- 以分类的思想来解决问题,先将问题中的事物进行分类,调用类中的属性和方法来实现对问题的解决
面向过程:
- 一步一步的实现目标
类(class)
属性
- 成员变量
- 局部变量
- 属性赋值的先后顺序
成员变量和局部变量的相同点:
- 定义的位置不同,局部变量:方法内部;成员变量:方法外部,直接写在类中
- 作用范围不一样,局部变量:只在方法体里有效,出了方法就无效了;成员变量:整个类都能使用
- 默认不一样,局部变量无默认值,使用必须手动赋值;成员变量,没赋值被使用时会直接使用默认值,不同的数据类型默认值不同
- 生命周期不同,局部变量岁方法进栈而诞生,随发出栈而消失;成员变量:随方法创建而诞生,随之对象垃圾回收
方法
-
方法重载
-
方法重写(方法重写声明格式,返回类型,注意事项)
-
构造方法
-
代码块(局部代码块,构造代码块,静态代码块)
方法重载:
一些功能相似的方法可以写成同样的方法名 功能不同的时候,尽可能让方法名不同。
满足方法重载的几个条件:
- 在同一个类中
- 方法名相同
- 形参列表不同(个数,类型,顺序)
- 方法的重载和返回值类型无关,和权限修饰符也无关
方法重写:
子类继承父类以后,继承过来的方法不能满足子类当前的业务需求,子类有权利对这个方法进行重新编写,有必要进行方法的覆盖
满足方法重写的几个条件:
- 两个类要有继承关系
- 重写后的方法和之前的方法具有:相同的返回值类型 相同的方法名 相同的形参列表
- 重写的方法的访问权限不能更低
- 重写之后的方法抛出的异常类型不能大于父类抛出的异常类型
小总结:
名称 | 发生范围 | 方法名 | 形参列表 | 返回类型 | 修饰符 |
重载(Overload) | 本类 | 必须相同 | 类型,个数或者顺序至少有一个不同 | 不要求 | 不要求 |
重写(Override) | 父子类 | 必须相同 | 相同 | 子类重写的方法,返回的类型和父类返回的类型一致,或者是其子类 | 子类方法不能缩小父类方法的访问范围 |
构造方法:
类构造对象时调用的方法,用来实例化对象
作用:
- 构造出来一个类的实例
- 队后造出来的一个类的实例初始化
注意:
- 不能被static、final、abstract修饰
- 构造方法的名字必须与定义他的类名完全相同,没有返回类型,甚至连void也没有
- 类中必定有构造方法,若不写,系统自动添加无参构造方法。接口不允许被实例化,所以接口中没有构造方法
- 构造方法可以被重载。没有参数的构造方法称为默认构造方法,与一般的方法一样,构造方法可以进行任何活动
- 如果写了一个有参的构造方法,就一定要写无参构造方法
代码块
- 局部代码块:在方法中出现,限定变量生命周期,及早释放,提高内存利用率
- 构造代码块(初始化块):在类中方法外出现
- 静态代码块:一般用于加载驱动
static{}
面向对象的三大特征
封装
利用抽象数据类型将数据和基于数据的基本操作包装在一起,也就是将信息隐藏,时期构成不可分割的独立实体。
好处:
- 良好的封装能够减少耦合。
- 类内部的结构可以自由修改。
- 可以对成员进行更精确的控制。
- 隐藏信息,实现细节。
将对象属性私有化,同时提供一些可以被外界访问属性的方法(get和set方法)
继承
使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。
注意:
- 子类拥有父类非private的属性和方法。
- 子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
- 子类可以用自己的方式实现父类的方法。
多态
一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
Java实现多态有三个必要条件:继承、重写、向上转型。
- 继承:在多态中必须存在有继承关系的子类和父类。
- 重写:子类对父类中某些方法进行重新定义,在调用这些方法时就会调用子类的方法。
- 向上转型:在多态中需要将子类的引用赋给父类对象,只有这样该引用才能够具备技能调用父类的方法和子类的方法。
只有满足了上述三个条件,我们才能够在同一个继承结构中使用统一的逻辑实现代码处理不同的对象,从而达到执行不同的行为。
面向对象关键字
目前所学关键词可参考上篇博客