重载和重写有什么区别?有什么相似之处?
Java中的过载由静态类型决定,在类被加载时决定,属于静态分发; 改写由动态类型决定,在运行时决定,是动态分配。 动态分配通过虚拟方法表实现,虚拟方法表中存在各方法的实际入口地址。 如果父类中的某个方法的子类没有被改写,则父类和子类的方法表中的方法地址相同,如果被改写,则子类的方法表的地址是指改写后的地址; 典型的重写方法与子类继承父类、重写父类的方法,在动态绑定中实现相同的方法名称,但由于参数类型或数量不同,因此过载在一个类中如果子类中的方法与父类中的方法具有相同的方法名称、返回值类型和参数表,新方法将复盖原始方法。
要使用父类的原始方法,请使用引用当前类的父类的super关键字。 子类函数的访问限定权限必须大于或等于父类。 重写Override后,子类中的方法可以与父类中的某个方法具有完全相同的名称和参数。 在子类中创建的实例对象调用此方法时,将调用子类中的定义方法。 这相当于涵盖与父类中定义的方法完全相同的方法,这也是面向对象编程多样性的表现形式。 子类涵盖父类的方法时,只有比父类少的异常或抛出父类引发的异常的子异常。
子类可以解决父类的一些问题,所以不能比父类解决更多的问题。 子类的方法的访问权限不能大于或小于父类。 如果父类的方法为private类型,则子类没有复盖限制,而是向子类添加了新方法。 子类可以定义新的特征,如果子类需要修改父类的一些方法来扩展,从而增强功能,程序员经常把这种操作方法称为重写,也称为间谍写或覆盖。 改写显示了Java的优越性,改写基于继承关系,使语言结构更加丰富。 在Java继承中,子类可以通过隐藏父类的方法来访问,也可以继承父类的方法。