方法重写:子类方法重写父类方法
1.重写是要有继承关系的,并且是子类重写父类的方法。
2.方法名必须相同
3.参数列表名相同
4.方法的修饰符范围可以扩大,但是不能缩小
5.抛出的异常范围可以缩小,但是不能扩大
6.非静态方法可重写,静态方法不可重写
非静态方法:
public class B {
public void test(){
System.out.println("B");
}
}
public class A extends B {
public void test(){
System.out.println("A");
}
}
public class demo03 {
public static void main(String[] args) {
A a = new A();
a.test();
B b = new A();
b.test();
}
}
结果:
静态方法:
public class B {
public static void test(){
System.out.println("B");
}
}
public class A extends B {
public static void test(){
System.out.println("A");
}
}
public class demo03 {
public static void main(String[] args) {
A a = new A();
a.test();
B b = new A();
b.test();
}
}
结果:
静态方法子类不会重写父类。B中的test()方法并没有被重写,仍然使用B中原来的test()方法。因此打印B。
非静态方法子类会重写父类。B中的test()方法实际上已经被A中的test()方法重写。因此打印A。
多态:同一方法根据发送对象不同而采用多种不同的行为方式
1.多态是方法的多态,属性没有多态
2.要有继承关系
3.子类重写父类方法
4.父类引用指向子类对象
Person p1 = new Person();
Person p2 = new Student();
//p1和p2区别:p2中的方法被子类Student中的部分方法重写,其余都不变