创建B类
package Demo01;
//重写是方法的重写,与属性无关
public class B {
}
创建A类
package Demo01;
public class A extends B {//设定A继承于B
}
创建Application类,用于测试
package Demo01;
public class Application {
public static void main(String[] args) {
//这个用于测试
}
}
在B里边写方法
package Demo01;
public class B {
//重写都是方法的重写,和属性无关
public static void test(){
System.out.println("B=>test()");
}
}
在A里边写方法
package Demo01;
public class A extends B {
public static void test(){
System.out.println("A=>test()");
}
}
在测试上写对象
package Demo01;
public class Application {
public static void main(String[] args) {
A a =new A();
a.test();
}
}
测试结果
在测试上再写对象
package Demo01;
public class Application {
public static void main(String[] args) {
//方法的调用只和左边定义的数据类型有关
A a =new A();
a.test(); //A
//父类的引用指向子类
B b =new A(); //B
b.test();
}
}
测试结果
在A当中去掉原先的static
我们看见第四行有一个蓝色小图标
在B当中也去掉static
alt+insert //注意箭头所指的地方
注释之前的方法(等效于删除)
package Demo01;
public class A extends B {
// public void test(){
// System.out.println("A=>test()");
// }
}
自动生成如下这样的方法
package Demo01;
public class A extends B {
// public void test(){
// System.out.println("A=>test()");
// }
@Override //这是注解,有功能的解释
public void test() {
super.test();
}
}
这是A当中此时的代码
package Demo01;
public class A extends B {
// public void test(){
// System.out.println("A=>test()");
// }
//Override : 重写
@Override
public void test() {
System.out.println("A=test()");
}
}
跑一下结果
package Demo01;
public class Application {
public static void main(String[] args) {
A a =new A();
a.test();
B b =new A();
b.test();
}
}
执行结果
会发现结果和之前不一样
由此证明静态方法和非静态方法区别很大
package Demo01;
public class Application {
public static void main(String[] args) {
//静态方法和非静态方法的区别很大
//静态方法: 方法的调用只和左边定义的数据类型有关
// 非静态:重写
A a =new A(); //子类重写了父类的方法
a.test();
B b =new A(); //子类重写了父类的方法
b.test();
}
}
重写:需要有继承关系,子类重写父类的方法
1.方法名必须相同
2.参数列表必须相同
3.修饰符:范围可以扩大,但是不可以缩小:public>protected>Default>private
4.抛出的异常,范围,可以被缩小,但是不可以扩大:ClassNotFoundException -----> Exception
重写:子类的方法和父类一致,方法体不同
为什么需要重写
父类的功能:子类不一定需要,或者不一定满足!
好了,有关Java方法的重写就讲到这里了,谢谢大家



