方法的重写
重写都是方法的重写,和属性无关,重写只和非静态方法有关,对关键词public可以使用。
重写:需要有继承关系,是子类重写父类的方法。
-
方法名必须相同
-
参数列表必须相同
-
修饰符:范围可以扩大但不能缩小: public>Protected>Default>private
-
抛出的异常:范围可以被缩小,但不能扩大。
重写:子类的方法和父类一定要一致,但是方法体不同。
为什么需要重写?
答: 父类的功能,子类不一定需要,或者不一定满足。
静态方法时如下:
Application:
package com.cheng.oop;
import com.cheng.oop.extend.A;
import com.cheng.oop.extend.B;
public class Application {
public static void main(String[] args) {
//方法的调用只和左边调用的数据类型有关
A a = new A();
a.print();//输出A
//父类的引用指向了子类,因为AB存在继承关系
B b = new A();
b.print();//输出B
}
}
B:
package com.cheng.oop.extend;
public class B {
public static void print(){
System.out.println("B-->print");//输出
}
}
A:
package com.cheng.oop.extend;
public class A extends B {
public static void print(){
System.out.println("A-->print");//输出
}
}
非静态方法如下:
Application:
package com.cheng.oop;
import com.cheng.oop.extend.A;
import com.cheng.oop.extend.B;
public class Application {
public static void main(String[] args) {
//方法的调用只和左边调用的数据类型有关
A a = new A();
a.print();//输出A
//父类的引用指向了子类,因为AB存在继承关系
B b = new A();//子类重写了父类的方法
b.print();//输出A
}
}
B:
package com.cheng.oop.extend;
public class B {
public void print(){
System.out.println("B-->print");
}
}
A:
package com.cheng.oop.extend;
public class A extends B {
可以看出,静态方法和非静态的方法区别很大!
依照个人理解,如B是父亲,职业医生,A是儿子,想当程序员。若static方法时,在Application中,A如果走自己的路,那么就会成为一名程序员,如果A按照B的期望来,就会成为一名医生。可是在没有static时,即子类重写父类时候,说明B的期望不符合A的要求,A进行重写,那么无论是A按照自己的方法来还是按照B期望A成为一名医生,最终A都会成为一名程序员。

浙公网安备 33010602011771号