四、方法重写
1、静态方法
package com.sh.work;
public class Demo04 {
public static void main(String[] args) {
//方法的调用只和定义的数据类型有关
A a = new A();
a.test();//A类静态方法
B b = new A();//父类的引用可以指向子类
b.test();//B类静态方法
}
}
package com.sh.work;
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
package com.sh.work;
public class A extends B{
public static void test(){
System.out.println("A=>test()");
}
}
2、非静态方法
此时把A和B中的静态方法去掉,利用快捷键在A类中进行重写,默认走的都是B的方法。如果在A类中重写自己的方法,得到的都是A的方法。那么可以得出一个结论,就是静态方法和非静态方法有区别。
原因是B b = new A();//非静态方法中子类重写了父类的方法。
此时才叫重写并且重写的时候修饰符还必须是public的,不能是私有的。
只有子类继承了父类才能重写,并且是子类重写父类的方法。
public class A extends B {
public void test() {
super.test();
}
}
//重写都是方法的重写,和属性无关
public class B {
public void test(){
System.out.println("B=>test()");
}
}
public class A extends B {
@Override
public void test() {
System.out.println("A=>test()");
}
}
//重写都是方法的重写,和属性无关
public class B {
public void test(){
System.out.println("B=>test()");
}
}
总结(重写):必须有继承到关系并且还是子类重写父类的方法,和属性无关 。子类的方法和父类必须要一致,方法体不同
特点:
1.方法名必须相同。
2.参数列表必须相同。
3.修饰符范围可以扩大。
4.抛出的异常:可以被缩小但是不能扩大。
为什么需要重写?
父类的功能:子类可能不一定需要,或者是不一定满足!