import java.util.Scanner; //静态方法写重写的关系 public class Main { public static void main(String[] args) { A a=new A(); a.test(); //静态方法和非静态的方法有很大的区别 //当类个有继承关系时,并且方法也静态方法时,可以让父类的引用指向子类,从而获取父类的方法 //而且静态方法和重写是没有关系的。 B b=new A(); b.test();//这种情况下,他会打印B=>test(),因为test方法是静态方法 } } class A extends B{ public static void test(){ System.out.println("A=>test()"); } } class B{ public static void test(){ System.out.println("B=>test()"); } }
import java.util.Scanner; //非静态方法 public class Main { public static void main(String[] args) { A a=new A(); a.test(); //静态方法和非静态的方法有很大的区别 //而且静态方法和重写是没有关系的。 B b=new A(); b.test();//因为在子类重写,并覆盖父类的方法,所以在这个位置再次像刚父类指向子类的引用方式去调用test方法输出的结果和之前并不一致,因为经过重写所以他只是会输出A=>test() } } class A extends B{ public void test(){//在这个位置重写,并覆盖了父类的方法,并且重写的方法要是公共的方法 System.out.println("A=>test()"); } } class B{ public void test(){ System.out.println("B=>test()"); } }
总结:
重写的提前是:
1.有继承关系
2.是子类重写父类的方法
3.参数列表必须相同,不然是重载
4.修饰符范围可以扩大但不能缩小:public>protected>default>private
5.抛出的异常的范围可以缩小,但是不能扩大
重定:子类的方法和父类必须要一致,方法体不同
为什么需要重写方法?
1.因为父类的功能,子类不一定需要,或者不一定满足
方法的重写:
重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖操作
应用:重写以后,当创建子类对象以后通过子类对象调用子父类中的同名同参的方法时,实际上是执行的是子类重写父类的方法
重写规定:
方法声明:权限修饰符 返回值类型 方法名(形参列表)throws 异常类型{
方法体
}
约定俗称:子类中的叫重写方法,父类的叫被重写方法
子类重写的方法的方法名和形参列表与父类被重写的方法和形参列表相同
子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符
>特殊情况:子类不能重写父类中声明为private权限修饰的方法
3、返回值类型:
>如果父类被重写的方法的返回值是void,则子类重写方法的返回值类型也是能是void
>父类被重写的方法的返回类型是A类型,则子类重写方法的返回值类型可以是A类或A类的子类