Override重写 父类 package com.oop.Demo04; //重写都是方法的重写,和属性无关 public class B { public void test() { System.out.println("B=>test()"); } } 子类 package com.oop.Demo04; public class A extends B { @Override//注解:有功能的注释! public void test() { System.out.println("A=>test()"); } } 测试类 package com.oop.Demo04; public class Application { //静态的方法和非动态的方法区别很大! //静态方法(static):/方法的调用只和左边,定义的数据类型有关 //非静态:重写 public static void main(String[] args) { /* b是A new出来的对象,因此调用了A的方法 因为静态方法是类的方法,而非静态是对象的方法 有static时,b调用了B类的方法,因为b是用用B类定义的 没有static时,b调用的是对象的方法,而b是用A类定义的,所以调用了子类A的方法 */ A a = new A(); a.test();//A //父类的引用指向了子类 B b = new A(); // 子类重写了父类的方法 b.test();//B } } 总结 重写:需要有继承关系,子类重写父类的方法! 方法名必须相同参数列表必须相同修饰符:范围可以扩大但不能缩小: public>protected>default>private抛出的异常:范围可以被缩小,但不能扩大; ClassNotFoundException–>Exception(大) 重写,子类的方法和父类必须一致;方法体不同! 为什么需要重写 父类的功能:子类不一定需要,或者不一定满足! Alt + Insert ;Override重写