Java多态特性---Overload和Override

方法的重载Overload

Java中,重载就是编写一个名称相同,参数个数或者类型不同的方法,关于方法重载的定义要求:

  • 方法的重载要求方法的名称必须相同
  • 方法的参数的类型和个数不同
  • 不对方法的返回值做约束,但考虑到程序开发的标准性,会统一方法重载时的返回值类型
  • 对方法的访问控制权限不做要求
public class OverLoadTestDrive {
    public static void main(String[] args) {
        System.out.println(add(3, 5));
        System.out.println(add(3, 4, 5));
        System.out.println(add(3.1D, 52.3D));
    }
    //方法的名称相同,参数的个数或类型不同不同
    public static int add(int a,int b) {
        return a+b;
    }
    public static int add(int a,int b,int c) {
        return a+b+c;
    }
    public static double add(double a, double b) {
        return a+b;
    }
}
/*
输出:
8
12
55.4
 */

Overload多态特性在Java中的应用

  • 当一个方法在调用过程中需要传入不同类型的参数时,可以使用方法的重载定义出同一方法的不同版本。
  • 在类的构造方法中的应用。可以通过定义不同版本的构造函数,实现不同参数版本的构造方法,这样就可以灵活性的传参通过不同的构造方法实例化不同属性要求的类的实例。

方法的覆写Override

在Java中,方法的覆写可以继承父类中非private和非final关键字定义的所有方法。这样当父类中的某些方法无法满足子类的功能需要时,就可以通过方法的覆盖在子类中定义扩充功能的同版本的方法。关于方法覆写的定义要求:

  • 子类所覆写的父类方法,必须拥有比父类更宽松的访问控制权限
    class Person {
        public void connect() {
            System.out.println("18537955555");
        }
    }
    class Student extends Person {
        @Override
        default void connect() {    //错误,子类所覆写的方法使用了更为严格的访问控制权限
            System.out.println("18555555555");
        }
    }
    
    //访问控制权限:
    public < default < private
  • 子类所覆写的父类的方法,必须与父类中的被覆写方法的方法名称、返回值类型、参数类型以及个数完全相同。
     

    //一、
    class Person {
        public int performance() {
            return 99;
        }
    }
    class Student extends Person {
        @Override
        public double performance() {    //错误,子类中覆写的方法的返回值类型和父类中不同
        return 88.80D;
        }
    }
    //二、
    //父类
    class Person {
        public int performance(int result) {
            return result;
        }
    }
    class Student extends Person {
        @Override
        public int performance(double result) {    //错误,子类覆写方法的参数类型和父类不同
            return result;
        }
    }
    //三、
    class Student extends Person {
        @Override
        public int performance(int result1,int result2) {    //错误,子类所覆写的方法参数个数和父类不同
            return result1;
        }
    }
  • 父类方法定义为private方法时,子类无法覆写该方法
     

    class Person {
        private int performance(int result) {
            return 99;
        }
    }
    class Student extends Person {
        public int performance(int result) {        //错误,实际上是在子类中重新定义了一个名为
        return result                               //performance的方法,此时即使更换返回值类型
        }                                            //或者方法参数,程序也不会报错      
    }                                                                     
  • 当父类中的方法使用static关键字定义时,该方法不能被覆写。

  • 当父类中的方法用关键字final定义时,子类中不可以覆写该方法
     

    class Person {
        public final int performance(int result) {    //父类方法使用了final关键字修饰
            return result;    
        }
    }
    class Student extends Person {
        @Override
        public int performance(int result) {    //错误,子类不能覆写被final修饰的父类的方法
            return result;
        }
    }

Override多态性在Java中的应用

  • OverrideAnnotation注解。可以在子类中描述出哪些方法时覆写来的,增强了程序的可读性,并且在覆写方法的上方使用Annotation注解,可以检查出由于覆写方法定义错误的提示信息。
  • 当父类中的方法无法满足子类的要求是,方法的覆写使得子类拥有了属于自己的扩充过的方法。
  • 可以在不改变父类方法或属性的前提下,创建一个和父类有相同名称的方法,使得程序更加安全。

Overload和Override之间的区别

区别Overload(重载)Override(覆写)
定义方法的名称相同,参数类型和个数或者返回值类型可以不同方法名称,返回值类型,参数个数以及类型必须完全形同
访问控制权限不强制权限要求被子类覆写的方法必须拥有比父类更宽松的访问控制权限
范围发生在同一个类中发生在继承关系类中
多态类型重载是编译时决定的静态多态,是多态的动态绑定覆写是普通的多态,在运行阶段决定,是面向对象编程的重要特征

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小s的s

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值