/** * 回顾方法重载: * - 方法重载又称为Overload * - 方法重载的使用时机: * * 在同一个类当中,方法完成的功能相似,建议方法名相同,这样方便程序员的编程,就像在调用同一个方法似的 * - 满足什么条件才构成方法重载: * * 在同一个类当中 * * 方法名相同 * * 参数列表不同:类型不同、顺序不同、个数不同都叫不同 * - 方法重载和什么无关: * * 和方法的修饰符列表无关 * * 和方法的返回值类型无关 * 关于方法覆盖: * - 方法覆盖又称为方法重写/override(overwrite) * - 什么时候用到方法覆盖 * 当父类中的方法已经无法满足当前子类的业务需要,子类有必要将从父类中继承过来的方法进行重新编写,这个编写的过程称为方法重写/方法覆盖 * - 代码满足什么条件之后,就构成了方法覆盖: * * 方法覆盖发生在具有继承关系的父子类之间 * * 方法覆盖的时候要求:返回值类型相同,方法名相同,形参列表相同 * * 方法覆盖的时候要求:和父类相比访问权限不能更低,可以更高 * * 方法覆盖的时候要求:和父类相比抛出异常不能更多,可以更少 * * 对于返回值类型来说:覆盖后的方法 如果是基本数据类型必须一致,而引用数据类型可以变小 * (但实际开发中意义不大,几乎没有人这样使用) * * - 建议方法覆盖的时候尽量复制粘贴,编写容易出错,导致覆盖没有发生 * - 注意: * * 私有方法无法覆盖 * * 构造方法不能被继承,所以不能覆盖 * * 方法覆盖只针对实例方法,静态方法覆盖没有意义(方法覆盖通常和多态联合使用) * * 覆盖只针对方法,不针对属性 */ public class OverrideText { public static void main(String[] args) { // 创建cat对象 Cat c = new Cat(); c.move(); // 创建bird对象 Bird b = new Bird(); b.move(); // 创建鹦鹉对象 YingWu y = new YingWu(); y.move(); } }
/*
方法没有重写程序运行结果如下:
动物在移动
动物在移动
动物在移动
*/
/*
方法重写后程序运行结果如下:
猫在抓老鼠
鸟儿在飞行
鹦鹉在学说话
*/
/* //子类没有重写父类方法的代码 //Cat类继承Animal类 public class Cat extends Animal { }
//Bird类继承Animal类 public class Bird extends Animal { }
//YingWu类继承Animal类 public class YingWu extends Bird { }
*/
//子类重写父类的代码如下:
//Cat类继承Animal类 public class Cat extends Animal { //重写父类的move()方法 public void move() { System.out.println("猫在抓老鼠"); } }
//Bird类继承Animal类 public class Bird extends Animal { //重写父类的move()方法 public void move() { System.out.println("鸟儿在飞行"); } }
//YingWu类继承Animal类 public class YingWu extends Bird { public void move() { System.out.println("鹦鹉在学说话"); } }