一、重写:子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变。子类可以根据需要实现父类的方法 重写方法不能抛出新的检查异常,只能抛出子类异常 面向对象可以重写任何现有的方法 实例如下: class Animal { public void move() { System.out.println("动物可以移动"); } } class Dog extends Animal { public void move() { System.out.println("狗可以跑和走"); } } 方法调用: public class TestDog { public static void main(String args[]) { Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();// 执行 Dog 类的方法 } } 运行结果: 动物可以移动 狗可以跑和走 二、分析上面实例 尽管b属于Animal类型 但它运行的是Dog类的move方法 所以上面例子能编译成功 因为Animal类中存在move方法 运行的是特定对象的方法 Dog子类当中定义一个bark的方法 在实例化 Animal a = new Animal(); // Animal 对象 Animal b = new Dog(); // Dog 对象 a.move();// 执行 Animal 类的方法 b.move();// 执行 Dog 类的方法 b.bark(); 这时候程序会抛出一个编译错误 因为b的引用类型Animal没有bark方法 三、方法重写规则 参数列表必须完全和被重写方法相同 返回类型须与被重写方法的返回类型相同 访问权限必须比父类被重写的方法的访问权限高 父类的成员方法只能被子类重写 构造方法不能被重写 四、super关键字的使用 当需要在子类中调用父类的被重写方法时,要使用super关键字 实例如下: class Animal { public void move() { System.out.println("动物可以移动"); } } class Dog extends Animal { public void move() { super.move(); // 应用super类的方法 System.out.println("狗可以跑和走"); } } 调用: public class TestDog { public static void main(String args[]) { Animal b = new Dog(); // Dog 对象 b.move(); // 执行 Dog类的方法 } } 五、重载 重载是在一个类里面,方法名相同,而参数不同,返回类型可以相同可以不同 每个重载的方法(构造函数)都必须有独一无二的参数类型列表 构造器的重载用的比较多 重载规则: 被重载的方法必须改变参数列表,可以改变返回类型,可以改变访问修饰符 六、总结 方法的重载:定义了多个方法名相同,参数数量不同/相同、类型和次序不同 方法的重写:子类存在方法与父类的方法的名字相同,参数的个数和类型一致,返回值也一样的方法 七、重载就是同样的一个方法能够根据输入数据的不同,做出不同的处理 重写就是当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法