Java再入:08 - 对象的多态

本文深入探讨了Java中的多态性,包括方法的重载(Overload)和重写(Override)概念。重载关注同名方法的参数列表差异,而重写则涉及子类对父类方法的修改。重载时参数列表必须不同,返回类型不影响重载;重写时参数列表必须完全相同,但子类可以返回父类返回类型的派生类。此外,重写还受到访问权限、final和static方法等限制。
摘要由CSDN通过智能技术生成

08 对象的多态

一、方法函数签名

方法的访问权限、返回类型、名字和参数列表称为方法的签名

二、多态

多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实例而执行不同操作。

  • 重载
  • 重写

三、重载 Overload

在一个类中,可以有多个同名的方法,但是要保证参数类型,数目不相同,否则会产生编译错误

注意参数列表一定要不同 => 参数数量、参数类型、参数顺序

  1. 被重载的方法必须改变参数列表;

  2. 被重载的方法可以改变返回类型 ,但是无法以返回值类型作为重载函数的区分标准

    class TEST {
        public void fuck() {
    
        }
        public void fuck(String a) {}
        public boolean fuck(String a) {///这个方法不是重载,因为 public void fuck 已经出现了该参数列表 String a,由于Java的重载规范第二点,这将无法通过编译
            return true;
        }
    }
    
  3. 被重载的方法可以改变访问修饰符,同上;

    class TEST {
        protected boolean fuck(String a) {
            return true;
        }
    
        public boolean fuck(String a) {
          return true;
        }
        ///这个方法不是重载,protected boolean fuck 已经出现了该参数列表 String a,由于Java的重载规范第三点,这将无法通过编译
    }
    
  4. 被重载的方法可以声明新的或更广的检查异常;

  5. 方法能够在同一个类中或者在一个子类中被重载。

PS:关于什么是无法以返回值判断是否重载:假设有一些重载函数,那没两两一定满足参数列表不同,但是不一定访问修饰符和返回类型相同。

PS:构造函数可以被重载哦,这也是及其方便的特性,让对对象的初始化更加人性化,方便。

四、重写 Override

重写的实质是指;对父类函数方法的重新编写,即子类屏蔽父类方法,展示新的方法。
在子类声明中,一旦出现函数方法名和父类某一函数方法名相同就要进行检测,如果返回值和参数列表有任意一个不同,都不是重写,而是在子类定义了一个该函数签名的方法而已。

  1. 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!
    参数列表必须完全与被重写方法的相同。

  2. 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同)。

  3. 访问权限不能比父类中被重写的方法的访问权限更低。例如:如果父类的一个方法被声明为 public,那么在子类中重写该方法就不能声明为 protected。

  4. 父类的成员方法只能被它的子类重写。

  5. 声明为 final 的方法不能被重写。

  6. 声明为 static 的方法不能被重写,但是能够被再次声明。

  7. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为 private 和 final 的方法。

  8. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为 public 和 protected 的非 final 方法。

  9. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

  10. 构造方法不能被重写。

  11. 如果不能继承一个方法,则不能重写这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值