zoukankan      html  css  js  c++  java
  • 重写( override)and 重载(overload)

    重写override:是子类对父类的允许访问的方法的实现过程的重新编写,名字,返回值和形参都不能改变,即外壳不变,内心更改

    重载overload:同一个类里面的方法,名字相同而参数不同,返回值可以相同也可以不相同。调用的时候根据传入的参数来匹配调用的方法。最常用的重载就是构造函数。

    重写列子:

    public class Animal {
    String name;
    int age;
    //在父类里定义了一个方法move()
    public void move(){
    System.out.println("I can run");
    }
    }

    public class Dog {
      //在子类里重写方法move(),更改实现过程
    public void move(){
    System.out.println("i am a dog, i can run very fast");
    }

    public static void main(String[] args){
    Animal a = new Animal();
    Dog b = new Dog();
    a.move();
    b.move();
    }
    }

    运行结果

    I can run
    i am a dog, i can run very fast

    重写的规则:

    参数列表必须与被重写的方法相同

    返回值类型必须相同

    访问权限不能比父类中方法的权限低。如如果在父类中的访问权限是public,在子类中不能改写成protected

    父类的成员方法只能被子类重写

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

    子类和父类在同一个包中,子类可以重写父类的所有方法,除了private和final的方法

    子类和父类不在同一个包中,子类只能重写父类中public和protected的非final方法

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

    构造函数不能被重写

    重载列子:对方法move()进行重载,传入不同的参数,可以有不同的返回值类型

    public class Dog {
    public void move(){
    System.out.println("i am a dog, i can run very fast");
    }
    public String move(String name){
    return name;
    }

    public int move(int i){
    return i;
    }


    public static void main(String[] args){
    Animal a = new Animal();
    Dog b = new Dog();
    a.move();
    b.move();
    }
    }

    重载的规则

    每一个重载的方法或者构造函数都必须有不同的参数列表(类型,个数,顺序)

    最常用的重载是构造函数

    被重载的方法可以改变返回值,访问权限

    被重载的方法可以声明新的或者更广的检查异常,但是不能声明更广的强制异常

    方法可以在同一个类中或者子类中被重载

  • 相关阅读:
    关于数据库主键和外键
    数据库建立索引常用原则
    恭喜!Apache Hudi社区新晋多位Committer
    触宝科技基于Apache Hudi的流批一体架构实践
    轻快好用的Docker版云桌面(不到300M、运行快、省流量)
    实时视频
    通讯-- 通讯录
    通讯-- 总指挥部
    右侧菜单-- 事件面板
    应急救援预案选择逻辑
  • 原文地址:https://www.cnblogs.com/xiaohai2003ly/p/7084845.html
Copyright © 2011-2022 走看看