chapter04_Java基础知识_6_重载和覆盖,抽象类和接口

本文深入解析了重载与覆盖的概念,阐述了它们在不同参数、返回值及异常类型下的应用区别,同时讨论了抽象类及其方法实现的要求,为理解面向对象编程提供了清晰视角。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 重载

    (1) 重载通过不同的参数个数、不同的参数类型、不同的参数顺序实现区分

    (2) 不能通过 方法的访问权限、返回值的类型、抛出的异常类型进行重载

  • 覆盖

    (1) 定义:派生类的函数覆盖基类函数

    (2) 基类中的方法是private时,无论如何都不会被派生类重载(此时叫做定义了一个新函数)

    (3) 满足以下条件时,才称为派生类的方法对基类的方法进行了__覆盖__

    1° 函数名相同

    2° 参数类型、顺序、个数相同

    3° 返回值相同

    4° 抛出异常的类型相同

  • 重载和覆盖的区别

    (1) 重载是同一个类中的关系;覆盖是基类和派生类的关系

    (2) 重载时使用哪个函数由实参形式和形参形式决定;覆盖时使用哪个函数根据对象的类型(对象对应的存储空间类型)决定

    示例

      class Super {
    
          public int f() {
    
              return 1;
          }
      }
    
      class Sub extends Super {
    
          public float f() {
    
              return 1.0f;
          }
      }
    

    此时会发生__编译错误__,因为既不是覆盖也不是重载, 调用 Super s = new Sub(); s.f()时会不知道调用哪个,所以拒绝编译

  • 抽象类

    (1) 抽象类定义一个抽象方法后,如果一个派生的具体实现类扩展了抽象类,那么它必须实现基类的所有抽象方法,且必须有相等或更广的访问权限(例如基类是default,派生类可以是default、protected或public,但是不能是private

    (2) 抽象类中不能和abstract连用的关键字

    1° private:此时派生类永远没有机会实现它,没有意义

    2° static:静态方法属于这个类本身,不需要实例;而抽象方法本身就是交给派生类去实现的,需要实例,两者矛盾(一个必须要有具体实现,一个交给派生类一定不能有具体实现)

    3° native:native和abstract单独作用时都是只有定义没有方法体,使用native时交给的是本地操作系统,使用abstract交给的是子类,一并使用会产生矛盾

    4° synchronized:没有具体实现,基类添加同步没有意义

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值