• 重载和重写的区别


    重写(Override) 从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名、参数列表、返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。

    public class Animal {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Cat cat = new Cat();
            cat.sayHello();
        }
        public void sayHello() {
        	System.out.println("Hello");
        }
    }
    class Cat extends Animal{
        @Override
        public void sayHello() {
            // TODO Auto-generated method stub
            System.out.println("Hello,My name is cat ");
        }
    }
    Java

    重写总结:

    1.发生在父类与子类之间

    2.方法名、参数列表、返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

    3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

    4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

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

    6.构造方法不能被重写

    重载(Overload) 在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同) 则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来 判断重载

    public class Animal {
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Animal animal = new Animal();
            animal.sayHello();
            animal.sayHello("cat");
        }
        public void sayHello() {
        	System.out.println("Hello");
        }
        public void sayHello(String name) {
        	System.out.println("Hello" + " " + name);
        }
    }
    Java

    重载总结:

    1.重载Overload是一个类中多态性的一种表现

    2.重载要求同名方法的参数列表不同(参数类型,参数个数甚至是参数顺序)

    3.重载的时候,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准

    我们通过表格来分析下重载和重写的区别

     重载(Overloading)重写(Overriding)
    类的数量 本类 父子类、接口与实现类
    方法名称 一致 一致
    参数列表 必须修改 一定不能修改
    返回类型 可以修改 一定不能修改
    异常 可以修改 可以减少或删除,但不能扩展

     

  • 相关阅读:
    Algs4-1.3.37Josephus问题
    Algs4-1.3.35随机队列
    Algs4-1.3.33一个双向队列Deque的可变长环形数组实现
    Algs4-1.3.34随机背包
    Algs4-1.3.33一个双向队列Deque-双向链表实现
    Algs4-1.3.32链表实现Stack和Queue的合体Steque
    Algs4-1.3.31实现双向链表
    Algs4-1.3.30反转链表
    C语言多级指针
    spring mvc@ModelAttribute与@SessionAttributes的执行流程
  • 原文地址:https://www.cnblogs.com/joshua317/p/15145368.html
Copyright © 2020-2023  润新知