面向对象的三大特性
面向对象有三大特性分别是:
- 封装
- 继承
- 多态
本次主要围绕三大特性中的封装和继承来展开,并介绍其重要概念,例如方法重载、抽象类、方法重写等。
封装
一、为什么要封装?
- 良好的封装能够减少耦合
- 类内部可以自由修改
- 可以对成员变量进行更精确的控制
- 隐藏信息,实现细节
二、 set/get访问器
set/get访问器可以保证属性是安全的,而且可以和外界正常交流
三、构造方法:创建对象的时候后台会自动调用的方法
- 特点:没有返回值+方法名和类名一致
- 作用:创建对象并且进行初始化赋值
- 隐式无参构造:当类中没有定义构造方法时系统会自动默认分配无参构造,但是当定义某个构造函数后,系统会将分配的无参构造收回
四、方法重载:
- 在同一个类中
- 方法名相同
- 参数不同(参数的个数不同,参数的类型不同)
- 对返回值和修饰符没有要求
总结:即同名同类不同参(不同参:类型 顺序 数量)
为什么使用方法重载?
同一个方法名,传递不同的参数,解决不同的问题,简化代码量
五、static的用法
- 影响:可以使用类名和对象名调用静态属性和方法
- 含义:静态代表全局共享
- 用法
a.静态属性: public static String name;
b.静态方法: public static void test(){}
c.静态代码块: static(代码) 类被加载的时候自动执行一次
继承
继承是面向对象三大特性之一,其作用是减少代码重复率,提高代码复用性
一、继承的步骤?
- 根据子类是一个父类的逻辑定义父类的的名字
- 将子类公共的属性和方法定义在父类中
- 用继承关键字extends表示父子关系
- 在子类中定义自己特有的属性和方法
public Car extends Vehicle //访问修饰符 子类 继承关键字 父类{
}
1.使用extends关键字实现继承,上面代码中Car为子类,Vehicle为父类
2.继承时代码的执行顺序:先父后子,先属性后构造
二、子类不可以继承父类的三个资源
- 私有化的属性和方法,使用private修饰
- 构造方法(可以调用,但不属于子类)
- 当父类与子类不在同一个包下时,默认权限的属性和方法无法继承
三、四大权限
- private: 本类
- 默认(default): 本类、同包
- protected: 本类、同包、子类
- public: 任何地方
四、this和super的区别
-
this:指代当前类的对象
-
super:指代当前类父类的对象
-
用法:
调构造: super(); super(参数);
调属性: super.属性名;
调方法: super.方法名(); -
注意
super调用构造方法时必须位于代码第一行,否则报错
super调用属性和方法时注意权限问题
五、方法重写
方法重写一般发生在子类中,即子类改造父类当中已经存在的某个方法
注意事项:
- 同名
- 同参
- 不同类
- 方法的权限不能缩小
- 返回值要么相同,要么是父子类关系
六、抽象类和抽象方法的特点:
- 抽象类不能实例化
- 抽象方法只有方法声明,没有方法实现,有抽象方法的类必须声明为抽象类。
- 用abstract修饰
- 抽象方法没有方法体{}
- 抽象方法必须定义在抽象类或者接口中
- 父类中的抽象方法要求所有子类强制重写改造,除非子类也是抽象类
七、final
用final修饰的类、不能再被继承。父类中用final修饰的方法,不能被子类重写。用final修饰的变量,只能在初始化时进行赋值,不能在其他地方修改,final和abstract互相矛盾,不能同时出现。