方法的重写
我们新建2个类,一个A类一个B类
在新建一个Applica 的测试类
让A类继承B类
public class A extend B{
}
重写是方法的重写和属性无关
在B类输入一个test方法
public static void test(){
System.out.println("B=>test()");
}
在A类输入一个test方法
public static void test(){
System.out.println("A=>test()");
}
我们在Applica类里面
new一个A
我们运行一下
输出了A类和B类的方法
A类和B类之间有个关系
叫做 继承关系
//父类的引用指向了子类
B b = new A();//子类重写了父类的方法
b.test(); //B
B类是父类, 父类的的引用是B, 结果指向的是A
A类的对象,把A赋值给了B,这时候B是A,A又继承了B类,向上转型。
方法的调用只和左边定义的数据类型有关
我们把A和B类里面的static关键词给删掉
就会发现旁边多了个符号
我们把A类的test方法给删掉
按住Alt + Insert 键
就会弹出一个界面
我们点击方法重写
他会自动帮我们生成一个
Override 重写
@Override //注解:有功能的注解
他默认调用了父类的test方法
我们在一次运行
发现结果跟刚才以及大有不同了,
刚才我们调用A走的是A 的方法,调用B走的是B的方法
先在两个都走了A方法
我们可以得出一个结论
静态方法和非静态方法区别很大
因为静态方法是类的方法,而非静态是对象的方法 即b是A new出来的对象,因此调用了A的方法
加了static的静态方法,它的调用和左边的数据类型有关
非静态方法:A a = new A();指向了A B b = new A();这个地方指向的是B ,但是还是A
//A重写了B的方法 子类重写了父类的方法
重写只跟非静态方法有关,因为static 一开始就跟类加载出来了
只有非静态状态下才能是重写
我们这个 IDEA可以有提示,这是不是方法重写,就是旁边那个小符号
重写的关键词只能是public 不能是private
重写注意
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小: private < protected < default < public
4.抛出的异常:范围,可以被缩小但不能扩大:ClassNotFoundException --> Exception(大)
重写:子类的方法和父类必须要一致:方法体不同!
为什么需要重写?
1.父类的功能,子类不一定需要,或者不一定满足