面向对象—重写(override)

xiaoxiao2021-02-27  311

子父类中成员函数的特点。 特殊情况: 子父类中定义了一模一样的函数 运行的结果是:子类的函数在运行。 这种情况在子父类中,是函数的另一个特性:override(重写,覆盖,复写)

重写什么时候用? 举例: /描述手机。 class Phone { //来电显示 void show() { System.out.println(“电话号码”); } } Phone p=new Phone(); p.show();

随着电话的升级,希望显示姓名,大头贴。 修改源码,虽然费劲但是可以解决问题,不利于后期的维护和扩展。 为了扩展方便,新功能是不是新的电话具备的呢? 单独描述单独封装。新电话也是新电话中的一种。继承-直接获取父类的功能。 但是新电话的来显功能已经变化了,需要重新定义。 那么定义一个新功能合适吗?比如newShow,不合适,因为父类已经将来显功能定义完了, 子类完全不需要定义新功能,直接用就可以了,如果子类的来显功能内容不同。 只需要保留来显功能,定义子类的内容即可,这就是重写的应用。

class NewPhone extends Phone { void show() { super.show();//如果还需要父类中原有的部分功能,可以通过super调用。 System.out.println(“姓名”); System.out.println(“大头贴”); } }

重写(覆盖)的注意事项:

1,子类覆盖父类,必须保证权限大于或等于父类的权限。

2,静态覆盖静态

写法上必须一模一样: 函数的返回值类型,函数名,参数列表都要一样。

class Fu { void show() { System.out.println("fu show run"); } } class Zi extends Fu { void show() { System.out.println("zi show run"); } } class ExtendsDemo2 { public static void main(String[] args) { Zi z=new Zi(); z.show(); } }
转载请注明原文地址: https://www.6miu.com/read-8382.html

最新回复(0)