方法重写
重写方法:Override Methods, 快捷键 ALT+ Insert 注意:重写与静态方法(带static)没又联系,只和非静态方法(不带static)有关。 子类对象调用方法的时候:先找子类本身,再找父类。
重写的条件
非静态方法. 必须是public的方法,如果是私有的(private)则无法重写。默认类型与受保护类型,也可以重写。 必须是子类继承了父类才可以重写,重写是子类重写父类的方法
方法名必须相同。 参数列表必须相同。 修饰符:范围可以 扩大但是不能缩小。
public>protected(受保护的)>Default(默认)>private(私有) 抛出的异常:范围,可以缩小,但是不能扩大;
重写与重载的区别
重写:方法名与参数名都一样,实现过程随意;
子类中出现了和父类中方法声明一模一样的方法。与返回值类型有关,返回值类型一致(或者是子父类)的。 重载:方法名相同,参数必须不同,
本类中出现的方法名一样,参数列表的方法不同,与返回值无关。
为什么需要重写
1.父类的功能,子类不一定需要,或者不一定满足。 2.当子类需要父类的功能,而功能主体子类有自己的特有内容时,可以重写父类的方法。这样既沿袭了父类的功能,又定义了子类特有的内容。 快捷键 ALT+ Insert;override
代码练习
b是A ,new出来的对象,因此调用了A的方法,因为静态方法是类的方法,而非静态方法是对象的方法; 也就是说,有static时,b调用的是B类的方法,因为b是用B类定义的,没有static时,b调用的是对象的方法,而b是用A类new的
package com. yuecheng. oop. Demo05;
public class B {
public void test ( ) {
System. out. println ( "B=>test()" ) ;
}
}
package com. yuecheng. oop. Demo05;
public class A extends B {
@Override
public void test ( ) {
System. out. println ( "A=>test()" ) ;
}
}
package com. yuecheng. oop;
import com. yuecheng. oop. Demo05. A;
import com. yuecheng. oop. Demo05. B;
public class Application {
public static void main ( String[ ] args) {
A a = new A ( ) ;
a. test ( ) ;
B b= new A ( ) ;
b. test ( ) ;
}
}