方法重写
重写只跟非静态方法有关!!!!
重写:子父类才能重写,子类重写父类的方法
子类的方法和父类必须要一致,方法体不同。
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大,但不能缩小 public>protected>default>private
-
抛出的异常可以被缩小,但不能扩大;
ClassNotFoundException–>Exception(大)
静态方法只能被继承,不能被重写!!!
为什么需要重写?
-
父类的功能,子类不一定需要,或不一定满足;
Alt+Insert: override;
public class Application{
public static void main(String[] args){
//静态方法和非静态方法区别很大
//这里如果改成public void test(),则全输出A=>test(),
//即b是A new出来的对象,因此调用了A的方法
//静态方法是类的方法,非静态方法是对象的方法
//有static,b调用了B类的方法,因为b是用B类定义的
//无static,b调用的是对象的方法,而b是A类new的
//静态方法:方法的调用之和左边,也就是定义的数据类型有关
//非静态方法:重写!!!!
A a=new A();
a.test();//A=>test()
//父类的引用指向了子类
B b=new A();//用B类new了A类的对象,把A赋值给了B
//这时候B是A,A又继承了B,向上转型,所以调用B类方法的时候
b.test();//B=>test()
}
}
//重写都是方法的重写,与属性无关
public class B{
public static void test(){//这里是static属性,不属于方法重写!
System.out.println("B=>test()");
}
}
public class A extends B{
public static void test(){
System.out.println("A=>test()");
}
}