在继承后,如果子类和父类中有同名的方法,子类调用同名的方法后,调用的是子类自己的方法,这就叫做覆盖。
当我们开发时,原有的父类---A类功能已经不够强了,我们需要对他进行功能修改,但又不能改动他的代码,因此我们可以用B类继承A类,然后在B类中重写A类的功能方法,达到不修改A类就能改动A类功能的目的。
注意:为什么不能改动父类的代码?
因为实际开发中,原有的代码可能包括很多类,类与类之间可能又有很多关联,所谓牵一发而动全身,所以尽量是不改动原有的代码。
拿手机为例,一家手机公司的的phone1产品 太老了,功能不好使,因此公司就开发了新的产品phone2
例如:
class phone1
{
public void call() //phone1的打电话功能
{
System.out.println("version1 call");
}
public void photo() //phone1的拍照功能
{
System.out.println("version1 photo");
}
}
class phone2 extends phone1
{
public void call() //phone2继承了phone1的打电话和拍照功能,但重写了打电话功能,使打电话功能更高级,也意味着产品的升级
{
System.out.println("version2 call()");
}
}
public class Main {
public static void main(String[] args)
{
phone2 p = new phone2(); //这样的话,phone2就既有phone1的所有原有功能,又有phone2对phone1的call功能改进后的版本2的call功能
p.call();
}
}
打印结果:version2 call
在实际开发中,用这种方法就可以完成产品升级而不需要改动原有的父类代码。