Java方法的重写
子类重写父类的方法
-
需要有继承关系
-
方法名、参数列表必须相同
-
方法体不同
-
子类的修饰符:范围可以扩大但不能缩小。
-
抛出异常:范围可以被缩小,但不能被扩大。
-
方法的重写不能是静态方法
-
重写都是方法的重写,和属性无关。
为什么要重写?
-
父类的功能,子类不一定需要,或者不一定满足。
方法重写自动生成快捷键:Alt+Insert (override:重写)
注:静态方法和类是同时加载的,所以只和类有关,和对象无关。静态的方法是类的方法,而非静态方法是对象的方法。有static时,b调用了B类的方法,因为b是用B类定义的;没有static时,b调用的是对象的方法,而b是用A类new的。
都用static修饰的静态方法
package test.Demo02;
//父类B
public class B {
public static void test() {
System.out.println("B=>test");
}
}
package test.Demo02;
//子类A
public class A extends B{
public static void test() {
System.out.println("A=>test");
}
}
package test;
import test.Demo02.A;
import test.Demo02.B;
import test.Demo02.Student;
public class Application {
public static void main(String[] args) {
A a = new A();
a.test();
//父类的引用指向子类的对象
B b = new A();
b.test();
}
}
都不用static修饰的方法,可以实现方法的重写
package test.Demo02;
public class A extends B{
@Override //注解:有功能的注释
public void test() {
System.out.println("A=>test");
}
}
package test.Demo02;
public class B {
public void test() {
System.out.println("B=>test");
}
}
package test;
import test.Demo02.A;
import test.Demo02.B;
import test.Demo02.Student;
public class Application {
public static void main(String[] args) {
A a = new A();
a.test();
//父类的引用指向子类的对象
B b = new A(); //子类重写了父类的方法
b.test();
}
}