文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java入门绊脚石之Override和Overload的区别详解

2024-04-02 19:55

关注

前言:

各位小伙伴们,大家好,一日不见,如隔一日,今天我给大家分享一下大家在学习java过程当中遇到的一个问题,也是一道面试题,java中,Override和Overload的区别。

一、方法重写(Override)

1、方法重写基本概念

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

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

例子:


public class Animal {
    public void eat() {
        System.out.println("动物可以吃东西");
    }
}
 
//狗类继承动物类
class Dog extends Animal {
    //重写方法,需要Override注解
    @Override
    //方法体不变,参数不变,方法体改变
    public void eat() {
        System.out.println("可以吃东西");
    }
}
 
class Test {
    public static void main(String[] args) {
        //创建动物类实例对象
        Animal a = new Animal();
        //创建狗类实例对象
        Animal d = new Dog();
        //执行动物类方法
        a.eat();
        //执行狗类方法
        d.eat();
    }
}

编译结果:

动物可以吃东西
狗可以吃东西

在上面的例子中可以看到,尽管 d 属于 Animal 类型,但是它运行的是 Dog 类的eat方法。这是由于在编译阶段,只是检查参数的引用类型。然而在运行时,Java 虚拟机(JVM)指定对象的类型并且运行该对象的方法。因此在上面的例子中,之所以能编译成功,是因为 Animal 类中存在 eat 方法,然而运行时,运行的是特定对象的方法。

而如果父类中不存在特定的方法,那么程序将会报错。编译不成功。


public class Animal {
    public void eat() {
        System.out.println("动物可以吃东西");
    }
}
 
//狗类继承动物类
class Dog extends Animal {
    //重写方法,需要Override注解
    @Override
    //方法体不变,参数不变,方法体改变
    public void eat() {
        System.out.println("狗可以吃东西");
    }
    public void look() {
        System.out.println("狗可以看");
    }
}
 
class Test {
    public static void main(String[] args) {
        //创建动物类实例对象
        Animal a = new Animal();
        //创建狗类实例对象
        Animal d = new Dog();
        //执行动物类方法
        a.eat();
        //执行狗类方法
        d.eat();
        d.look();//这个语句无法编译
    }
}

2、方法重写基本规则及注意事项

二、overload方法重载

1、什么是重载

重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。

2、重载的规则

例子:



class Student {
    private String name;
    private int age;
 
    public Student() {}
 
    public Student(String name) {
        this.name = name;
    }
 
    public Student(int age) {
        this.age = age;
    }
 
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }
 
    public void show() {
        System.out.println(name + "," + age);
    }
}

public class StudentDemo {
    public static void main(String[] args) {
        //创建对象
        Student s1 = new Student();
        s1.show();
 
        //public Student(String name)
        Student s2 = new Student("林青霞");
        s2.show();
 
        //public Student(int age)
        Student s3 = new Student(30);
        s3.show();
 
        //public Student(String name,int age)
        Student s4 = new Student("林青霞",30);
        s4.show();
    }
}

例子中的三个方法构成重载。

区别点 重载方法 重写方法
参数列表 必须修改 一定不能修改
返回类型 可以修改 一定不能修改
异常 可以修改 可以减少或删除,一定不能抛出新的或者更广的异常
访问 可以修改 一定不能做更严格的限制(可以降低限制)

3、总结:

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

面试题回答:

方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。

这里用一张图来总结,帮助大家理解

到此这篇关于Java入门绊脚石之Override和Overload的区别详解的文章就介绍到这了,更多相关Java Override与Overload的区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯