面向对象三大特性:封装、继承、多态
1. 封装
程序编写追求“高内聚,低耦合”,高内聚即类内部数据操作细节自己完成,不允许外部干涉;低耦合即仅暴露少量的方法供外部使用。
Java中的封装:“属性私有,get/set供外部访问”
封装的作用:
1)提高程序安全性,保护数据
2)隐藏代码实现细节
3)统一接口(禁止直接访问一个对象中数据的实际表示,应通过操作接口来访问,称为信息隐藏)
4)系统可维护性增高
2. 继承
继承是类和类之间的一种关系,其本质是对一批类的抽象,从而实现对现实世界更好的建模。
其中需要注意以下三点:
Object类:
Java中所有的类都直接或间接继承了Object类
Super:
注意点:
- super调用父类的构造方法,必须在构造方法的第一行
- super必须只能出现在子类的方法或构造方法中
- super和this不能同时调用构造方法
vs this:
- 代表的对象不同:this代表本身调用者这个对象;super代表父类对象的应用;
- 前提:this没有继承也可以使用;super只能在继承条件才可以使用
- 构造方法:this()本类的构造;super()父类的构造
重写:
(需要有继承关系,子类重写父类的方法)
重写时:
1)方法名必须相同
2)参数列表必须相同
3)修饰符:范围可以扩大但不能缩小 public>protected>default>private
4)抛出异常:范围可以缩小,不可以扩大
为什么需要重写?
父类的功能,子类不一定需要,或者不一定满足。
注意:
重写只和非静态方法有关;静态方法在类加载时就加载了。
static(方法属于类,不属于实例)、final(常量)、private修饰的方法无法重写。
3. 多态
多态即同一个方法可以根据发送对象的不同而采用多种不同的行为方式。
一个对象的实际类型是确定的,可以指向的引用类型不确定。
也即:
一个引用变量到底会指向那个类型的实例对象,该引用变量发出的方法调用的到底是哪个类中实现的方法,必须在程序运行期间才能确定。
如:
对象执行哪些方法与左边有关:
使用多态注意:
- 多态是方法的多态,和属性无关;
- 父类和子类需要有联系,否则类型转换异常;
- 多态存在的条件:继承关系,方法需要重写,父类引用指向子类对象:
Father f1 = new Son();
补充: 多态有编译时多态(重载)与运行时多态(重写)两种实现机制。
另外,多态中涉及instanceof与类型转换,如下:
instanceof:
判断一个对象是什么类型X instanceof Y
如果X、Y有父子关系,则为true
类型转换:
1)父类引用指向子类对象
2)子类-->父类:向上转型,可能会丢失一些子类的方法
3)父类-->子类:向下转型,强制转换
4)类型转换作用:方便方法调用,减少重复代码
课程:【狂神说Java】Java零基础学习视频通俗易懂_哔哩哔哩_bilibili