方法重写
重写都是方法的重写,和属性无关
父类的引用指向了子类
静态的方法: 方法的调用只和左边、定义的数据类型有关
去掉static以后,两个箭头,一个向上,一个向下,O代表重载的意思
静态的方法和非静态的方法区别很大!
静态方法
非静态方法:重写
特点:
需要有继承关系,子类重写父类的方法!
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大但不能缩小: Public>Protected>Default>Private
4.抛出的异常:范围,可以被缩小,但不能扩大; ClassNotFoundException–>Exception(大)
重写:子类的方法和父类的方法必须要一致;方法体不同
为什么需要重写?
1.父类的功能,子类不一定需要,或者不一定满足!
一、非静态方法:没有static的时候,b调用的是对象的方法,而b是用A类new的
父类
package com.oop.demo05;
//重写都是方法的重写,和属性无关
public class B {
public void test(){
System.out.println("B=>test()");
}
}
子类
package com.oop.demo05;
public class A extends B{
//Override:重写
@Override
//注释:有功能的注释!
public void test() {
System.out.println("A=>test()");
}
}
测试
package com.oop.demo05;
//静态的方法和非静态的方法区别很大!
public class Application {
public static void main(String[] args) {
//方法的调用只和左边、定义的数据类型有关
A a = new A();
a.test();//A=>test()
//父类的引用指向了子类
B b=new A();//子类重写了父类的方法
b.test();//A=>test()
}
}
显示
A=>test()
A=>test()
二、静态方法 加了static,b调用了类的方法,b是用b类定义的。
静态方法,类一加载就出来了,所以只和类有关
父类
package com.oop.demo05;
//重写都是方法的重写,和属性无关
public class B {
public static void test(){
System.out.println("B=>test()");
}
}
子类
package com.oop.demo05;
public class A extends B{
//Override:重写
//注释:有功能的注释!
public static void test() {
System.out.println("A=>test()");
}
}
测试
package com.oop.demo05;
//静态的方法和非静态的方法区别很大!
public class Application {
public static void main(String[] args) {
//方法的调用只和左边、定义的数据类型有关
A a = new A();
a.test();//A=>test()
//父类的引用指向了子类
B b=new A();//子类重写了父类的方法
b.test();//B=>test()
}
}
显示
A=>test()
B=>test()