2301_76940034 2024-02-28 20:34 采纳率: 23.5%
浏览 2

有没有家人能通俗的讲一下为什么子类重写父类方法的访问权限必须大于等于父类,子类重写父类方法的返回值类型,子类必须小于等于父类

有没有家人能通俗的讲一下为什么子类重写父类方法的访问权限必须大于等于父类,子类重写父类方法的返回值类型,子类必须小于等于父类

  • 写回答

3条回答 默认 最新

  • 关注

    2301_76940034 晚上好🌙🌙🌙
    本答案参考通义千问

    在面向对象编程中,子类重写父类的方法时,有一些规则需要遵循,这些规则主要是为了保证程序的稳定性和继承的正确性。以下是关于访问权限、返回值类型的解释以及为什么有这样的规定:

    1. 访问权限:

      • 父类方法的访问权限决定了它在继承层次结构中的可见性和可调用性。
      • 如果子类重写的方法的访问权限小于等于父类方法,那么子类中的该方法将不会对父类的客户端可见,这可能导致预期的行为丢失或不可预测。
      • 为了确保子类能够覆盖并提供与父类相同的功能(至少在子类可见范围内),子类方法的访问权限至少应与父类方法相等,或者更开放。例如,如果父类方法是public,子类方法也应该是public,或者至少是protected(允许同一包内的子类访问)或package-private(允许同一包内所有类访问)。
    2. 返回值类型:

      • 子类重写父类方法时,返回值类型不能比父类方法更严格(更窄)。
      • 如果子类返回一个更具体的类型,可能会导致父类方法的使用者无法处理子类返回的新类型,这可能导致类型转换异常或错误。
      • 当子类重写父类的返回类型时,通常应该保持兼容性,即返回类型可以更宽松(更宽泛),或者保持不变。如果需要返回更具体的数据类型,应该声明一个新的方法,并让父类调用这个新的方法。

    总结:

    • 访问权限规则:
      • 子类方法的访问权限 >= 父类方法的访问权限(至少相等)
    • 返回值类型规则:
      • 子类方法的返回类型 <= 父类方法的返回类型

    有序列表如下:

    1. 确保继承的透明性:子类方法至少与父类具有相同的访问级别。
    2. 避免类型不匹配:子类返回值类型不能比父类更严格。
    3. 维护兼容性:在增加功能时,考虑保持原有的接口和行为,避免强制升级调用者的需求。
    评论

报告相同问题?

问题事件

  • 创建了问题 2月28日

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器