方法重写与多态
一.方法重写
1.原因
如果父类继承不能满足子类的需求,可以在子类中对父类的同名方法进行重写,以符合需求
2.重写
子类根据父类继承方法进行重新编写;
重写时,可以用super。方法的方式来保留父类的方法;
构造方法不能被重写。
3.方法重写规则(子类继承父类时)
- 方法名相同
- 参数列表要相同
- 返回值类型相同或者是其子类
- 返回值类型相同或者是其子类
- 抛出的异常不可以多于父类
4.方法重写和方法重载
方法重写:
位置:子类;
方法名:相同;
参数表:相同;
返回值:相同或者是其子类;
访问修饰符:不能比父类更严格
方法重载:
位置:同类;
方法名:相同;
参数表:不同;
返回值:无关;
访问修饰符:无关
二.Object类
1.Object类是所有类的父类
2.Object类被子类经常重写的方法
- toString():返回当前对象本身的有关信息,按字符串对象返回
- equals():比较两个对象是否是同一个对象,是则返回true
- hashCode():返回该对象的哈希代码值
- getClass():获取当前对象所属的类信息,返回Class对象
三.多态
1.含义
意味着一个特定类型的变量可以引用不同类型的对象,并且能自动调用引用对象的方法。方法重写是多态的基础
2.抽象方法
本身实例没有任何意义public abstract void print();
- 抽象方法没有方法体
- 抽象方法必须在抽象类里
- 抽象方法必须在子类中被实现,除非子类是抽象类
3.向上转型
子类向父类转型:<父类型><引用变量名>=new<子类型>();
- 系统自动进行类型转换
- 通过父类引用变量调用的方法是子类覆盖或者继承了父类的方法,不是父类的方法
- 此时父类引用变量无法调用子类特有的方法
4.向下转型
父类类型转换成子类类型<子类型><引用变量名>=(<子类型>)<父类型的引用变量>();
instanceof运算符:进行类型判断,对象的类型必须和instanceof后面的参数所指定的类在继承上有上下级关系
5.多态的应用
- 使用父类作为方法的形参
- 使用父类作为方法的返回值