一、方法重写(除构造方法之外的方法)
重写方法不要加static
当两个类都有static修饰时 方法的调用只和左边,定义的数据类型有关
重写的关键词只能是public
重写只有在父子关系中存在,子类重写父类的方法
方法重写:子类用特殊的方法实现,替换掉父类继承给它的方法实现
能调哪些方法,是引用决定的,具体要执行哪个类的方法,是引用指向的对象决定的
![在这里插入图片描述](https://img-blog.csdnimg.cn/8ec7696b0a92474bbb26f10a52c3c50b.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/42ca7d07bb9740e4b7bfa621da45a8f1.png)
即b是A new出来的对象,因此调用了A的方法
因为静态方法是类的方法,而非静态是对象的方法
有static时,b调用了B类的方法,因为b是用b类定义的
没有static时,b调用的是对象的方法,而b是用A类new的
静态属于类 非静态属于对象
引用是B类型,但用的A的方法,这就叫做A重写了B的方法
当IDEA中出现箭头说明重写了
![在这里插入图片描述](https://img-blog.csdnimg.cn/9281444a590f408e9f07b0cd33fe3333.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9ced33c5a54f4c94a90e50fa7e244b29.png)
package com.OOP;
import com.OOP.Demo_05.A;
import com.OOP.Demo_05.B;
public class Application {
public static void main(String[] args) {
A a=new A();
a.test();
B b=new A();
b.test();
}
}
package com.OOP.Demo_05;
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
package com.OOP.Demo_05;
public class A extends B
{
public static void test(){
System.out.println("A=>test()");
}
}
package com.OOP;
import com.OOP.Demo_05.A;
import com.OOP.Demo_05.B;
public class Application {
public static void main(String[] args) {
A a=new A();
a.test();
B b=new A();
b.test();
}
}
package com.OOP.Demo_05;
public class B {
public void test(){
System.out.println("B=>test()");
}
}
package com.OOP.Demo_05;
public class A extends B
{
public void test(){
System.out.println("A=>test()");
}
}
重写方法快捷键
Alt+insert
![在这里插入图片描述](https://img-blog.csdnimg.cn/8e639e51f7b04e6c9e7ce59e7250f62e.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/a5455c4a59084e09aaa2db1ea78d538c.png)
父类的静态方法能够被子类继承,但是不能够被子类重写
1.当父类方法被static修饰时
![在这里插入图片描述](https://img-blog.csdnimg.cn/277b4ffebb344ca9be59ff3c8c6cef63.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/4f80f3e0910a40ad99918463877434d7.png)
2.当父类方法不被static修饰时
![在这里插入图片描述](https://img-blog.csdnimg.cn/40f346cda9024f898df038cf81201140.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/27e635e631d947f08b7b4825f562fe94.png)
public class A extends B
{
@Override
public void test() {
System.out.println("A=>test()");
}
}
重写:需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小 public>Protected>Default>private 4.抛出的异常,范围,可以被缩小,但不能扩大:ClassNotFoundException–>Exception(大)
重写:子类的方法名参数类型、数量和父类要一致,方法体不同
当子类重写父类方法后,优先调用子类的重写方法
为什么需要重写?
1.父类的功能,子类不一定需要,或者不一定满足!
2.快捷键Alt+insert:override
4.抛出的异常,范围,可以被缩小,但不能扩大:ClassNotFoundException-->Exception(大)
重写:子类的方法名参数类型、数量和父类要一致,方法体不同
当子类重写父类方法后,优先调用子类的重写方法
为什么需要重写?
1.父类的功能,子类不一定需要,或者不一定满足!
2.快捷键Alt+insert:override