方法重写
注意:构造方法不能重写
- 重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表列表必须相同
3.修饰符:范围可以扩大但不能缩小: public > Protected > Default > private
4.抛出的异常: 范围,可以被缩小,但不能扩大; ClassNotFoundException > Exception(大) - 重写,子类的方法和父类必要一致;方法体不同!
- 为什么需要重写:
父类的功能,子类不一定需要,或者不一定满足! - Alt +Insert ; 快速添加 override;
- 重写实例
父类
public class FangFaChongXieFather {
public static void test(){
System.out.println("父类的静态方法");
}
public void test1(){
System.out.println("父类的非静态方法");
}
}
子类
public class FangFaCongXieSon extends FangFaChongXieFather{
public static void test(){
System.out.println("子类的静态方法");
}
// public void test1(){
// System.out.println("子类的非静态方法");
// }
/**
* Override 重写
* @Override 注解 有功能的注释
*
* 使用 Alt + insert 默认生成的是 super.test1(); 就是默认重写父类的方法
*/
@Override
public void test1() {
// super.test1();
System.out.println("子类的非静态方法");
}
}
main方法
public class C6FangFaDeChongXie {
public static void main(String[] args) {
/**
* 静态方法的调用 只和左边有关 ,也就是只和声明的对象有关(不会重写)
*
* 非静态方法 重写之后,父类的引用指向子类的方法,
* 就可以调用子类重写后的方法,但不能直接调用子类独有的方法
*/
FangFaChongXieFather fFCXFather = new FangFaChongXieFather();
fFCXFather.test(); //父类的静态方法
fFCXFather.test1(); //父类的非静态方法
System.out.println("========================");
/**
* 父类的引用指向了子类的方法
*/
FangFaChongXieFather fFCXFather1 = new FangFaCongXieSon();
fFCXFather1.test(); //父类的静态方法
fFCXFather1.test1(); //子类的非静态方法
System.out.println("========================");
FangFaCongXieSon fFCXSon = new FangFaCongXieSon();
fFCXSon.test(); //子类的静态方法
fFCXSon.test1(); //子类的非静态方法
/**
* 子类的引用 无法指向父类
*/
// FangFaCongXieSon fFCXSon1 = new FangFaChongXieFather();
// fFCXSon1.test();
}
}