面向对象多态与抽象
一、重写
Object是所有类的父类,定义了N多方法,但是有些可能并不符合我们的需求,这时候就需要用到方法的重写,按需重新定义该方法
equals
作用:比较两个数据是否相等 格式:对象1.equals(对象2);
equals与==的区别:
都是判断两个数据是否相等
== 可以比较所有数据类型的数据
1)比较基本数据类型->数据值
2)比较引用数据类型->比较对象地址
equals 只能比较引用数据类型的数据
Object类中equals方法的实现->默认比较对象的地址,可以通过重写equals方法实现比较对象的内容
Object类
是 java 中所有类的父类,在 java 中的所有类都会直接或者间接的继承自Object类
toString 类
直接打印一个对象的引用的时候,默认打印的是调用toString()方法的返回值
toString方法返回值默认也是地址
想打印对象成员变量值的时候也需要重写toString方法
快捷键:alt+(Fn)+insert
内有工具提供快速生成的几种常用的方法的重写
二、多态------------->面向对象三大特性之一
体现:父类的引用指向子类的对象
前提:继承关系|实现关系
使用:当多态调用时候,会调用子类中的重写方法
特点:
1)成员变量 :
编译运行看父类|左边|类型2)成员方法 :
编译看父类,运行找子类
编译看左边,运行找右边
编译看类型,运行找对象好处:
解耦 : 消除类型之间的耦合关系
可替换性
可扩充性
接口性
简化性
灵活性
便于后期维护
多态是行为的多态,行为不同的实现方式,行为即为方法,所以多态就是方法的多种实现方法,所以就要配合方法的重写,并且多态对子类的内容不可见
三、转型(可类比基本数据类型的类型转换)
引用数据类型:
父类->大
子类->小向上转型: 小->大
Person p = new Student();向下转型: 大->小
Student s = (Student)p;用途:
通过多态的引用调用子类中新增内容的时候,需要向下转型
注意事项:
向下转型时候,如果类型不注意,就有可能出现类型转换异常(ClassCastException)
关于instanceof运算符:运算符–>避免遇到类型转换异常
引用 instanceof 类型 : 判断前面的引用是否是指向后面类型的对象|子类对象->是true | 不是false
四、抽象类与抽象方法
在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。
抽象方法: 被abstract修饰的方法
没有方法体
要求定义在抽象类中
抽象类: 被abstract修饰的类
有抽象方法的类必定是抽象类,抽象类中不一定有抽象方法
抽象类的特点:
抽象类中可以存在具体方法,可以存在抽象方法
可以存在成员变量,构造器…抽象类不能实例化(不能创建对象)
一个抽象方法必须被重写,重写可以为抽象方法定义方法体
抽象类的使用: 通过具体子类的对象使用
具体的子类 : 重写了所有抽象方法+按需新增
抽象的子类 : 按需重写抽象方法+按需新增一个抽象方法一旦被重写,后续是否需要重写根据实现
abstract关键字不能与private,final,static,native一起使用