java面试基础 -- 方法重载 & 方法重写

这篇具有很好参考价值的文章主要介绍了java面试基础 -- 方法重载 & 方法重写。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

重载

重写 


重载

         方法的重载是指在同一个类中定义多个方法, 他们具有相同的名称, 但是具有不同的参数列表, 例如:

public void myMethod(int arg1) {
    // 方法体
}

public void myMethod(int arg1, int arg2) {
    // 方法体
}

public void myMethod(String arg1) {
    // 方法体
}

        此处我们看到三个不同参数的, 但是具有相同返回值和方法名的方法.

有如下测试案例:

public class Test {
    public static void main(String[] args) {
        Test_class test = new Test_class();
        test.myMethod(1);
        test.myMethod(1,2);
        test.myMethod("i love you");
    }
}

class Test_class {
    public void myMethod(int arg1) {
        System.out.println("参数为 int arg1");
    }

    public void myMethod(int arg1, int arg2) {
        System.out.println("参数为 int arg1  和 int arg2");
    }

    public void myMethod(String arg1) {
        System.out.println("参数为 String arg1");
    }

}

运行结果为:

java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

 我们将其中一个myMethod方法的返回值改为int类型:

java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

对其结果并无影响, 重载的返回类型可以相同也可以不相同, 返回类型不做要求.

也就是说每个重载的方法, 都必须要有一个独一无二的参数列表, 而返回类型不做要求.

例如有如下两个重载的方法:

public String myMethod(int arg1) {
    // 方法体
}

public int myMethod(int arg1) {
    // 方法体
}

他们具有相同的方法名, 相同的参数, 但是具不同的返回类型, 调用方法:

myMethod(1);

因为不同的返回值类型, JVM没办法分别到底要调用哪一个方法;

更深层次的原因: JVM调用方法是通过方法签名来判断到底要调用那个方法的, 什么是方法签名?? 方法签名 == 方法名称 + 参数个数 + 以及每个参数他们的参数类型 组成的一个唯一值, 这个唯一值就是方法签名, 从方法签名可以看出来, 返回类型不是签名的组成部分, 因此不同的返回类型不能作为是否重载的标志, 所以JVM也就无法确定要调用哪个方法了.

访问修饰限定符 是否对重载有影响?? 

 方法重载对方法的访问权限没有特定的要求。在Java中,方法的访问权限可以是public、protected、private或者默认(即不声明任何访问修饰符),而方法重载只是指在同一个类中定义了多个方法名相同但参数列表不同的方法。因此,方法重载并不会对方法的访问权限有任何限制

无论是public、protected、private还是默认访问权限的方法,都可以进行重载。重载的方法可以拥有不同的访问权限,只要符合各自的访问权限规则即可。例如,一个public的方法可以与一个private的方法重载,或者一个protected的方法可以与一个默认访问权限的方法重载。

需要注意的是,对于继承关系中的子类来说,如果子类要重载父类中的方法,那么子类中重载的方法的访问权限不能低于父类中被重载的方法的访问权限。这是由于子类要继承并覆盖父类的方法,如果降低访问权限可能会破坏封装性。

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.action();
        dog.action(5);
        dog.action("小黑");
    }
}

class Animal {
    public void action() {
        System.out.println("动物发出叫声");
    }
}

class Dog extends Animal{
    @Override
    public void action() {
        System.out.println("小狗:汪汪汪");
    }

    protected void action(String name) {
        System.out.println(name + " : 汪汪汪");
    }

    public int action(int age) {
        System.out.println("the dog'age is " + age);
        return 1;
    }
}

 java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

此代码中, public void action() {} 继承了父类中的action, 然后子类中对继承并重写的action方法进行重载, 如上: 



重写 

         子类在继承父类后并不只是拥有了父类的属性, 还可以对父类的属性进行拓展, 即对父类的成员方法进行重写.

        了解一下重写是怎么来的?? 

        这里有一个animal类, 他是所有动物的父类, 这个animal类具有一个行为方法, 叫做action(), animal类可以派生很多子类, 例如说 dog类, cat 类等等, 我们抽象出来的代码如下:

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.action();

        Cat cat = new Cat();
        cat.action();
    }
}

class Animal {
    public void action() {
        System.out.println("动物发出叫声");
    }
}

class Dog extends Animal{
    // null
}

class Cat extends Animal {
    // null
}

java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

        可以看出来, Animal这个类里面的action方法, 可以泛指很多种动物的叫声, 只要是继承了这个Animal类的都可以, 但是仅仅只是泛指还不够, 例如我们在小狗就是旺旺叫, 小猫就是喵喵叫, 这就显得不够灵活. 所以只是使用父类的action 方法, 不足以显示出子类的特性, 所有我们就需要把这个父类继承过来的方法进行重写:

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.action();

        Cat cat = new Cat();
        cat.action();
    }
}

class Animal {
    public void action() {
        System.out.println("动物发出叫声");
    }
}

class Dog extends Animal{
    public void action() {
        System.out.println("小狗 : 汪汪汪");
    }
}

class Cat extends Animal {
    public void action() {
        System.out.println("小猫: 喵喵喵");
    }
}

java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

 对比如重载, 我们可以思考一下, 重写对于返回值, 参数类型, 或者是权限修饰符??

规则:

  • 参数列表必须完全与被重写方法相同;
  • 返回类型必须完全与被重写方法的返回类型相同;
    java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java
  • 访问权限不能比父类中被重写的方法访问权限更低;
    java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java
  • 父类的成员方法只能被它的子类重写;
  • 声明为final的方法不能被重写;
  • 声明为static的方法不能被重写;
    java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java
  • 构造方法不能被重写;

 文章来源地址https://www.toymoban.com/news/detail-656374.html

java面试基础 -- 方法重载 & 方法重写,java面试基础篇,面试,职场和发展,java

 

 

 

到了这里,关于java面试基础 -- 方法重载 & 方法重写的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java重写(Override)&重载(Overload)

    目录 重写(Override)概述 重写(Override)讲解 重载(Overload)概述 重载(Override)讲解 Java面向对象编程中的重写(override)指的是子类可以重写其父类中的非private方法,使得子类在调用该方法时会使用自己的实现而不是父类的实现。 定义一个名为 Animal 的父类和一个名为 Cat 的子类,其

    2023年04月09日
    浏览(50)
  • Java语言中的重写和重载

    重写(override)和重载(overload)是编程语言中的两个常见概念,用于描述函数或方法的特定行为。 重写 指的是在子类中重新定义(覆盖)父类中已经存在的同名方法。重写可以修改或扩展父类的方法实现,使其更适合子类的需求。在重写中,子类方法的名称、参数类型、返

    2024年02月03日
    浏览(46)
  • java.8 - java -override&overload 重写和重载

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变 。 即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。 重写方法不能抛出新的检查异常或者比被重写方法

    2024年02月11日
    浏览(46)
  • 【JAVA】关于重写(Override)与重载(Overload)

    个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 关于JAVA,我们也已经学习过一段时间了,今天我们来学习一下在JAVA中方法的重载与重写。 方法重载(overload)是指 在一个类中定义多个同名但参数列表不同的方法 。Java编译器会根据方法调用时传递的参数来选择调用

    2024年02月08日
    浏览(54)
  • 【Java 基础】类和对象 & 方法重载详解

    《 Java 零基础入门到精通 》 专栏持续更新中。通过本专栏你将学习到 Java 从 入门 到 进阶 再到 实战 的全套完整内容,所有内容均将集中于此专栏。无论是初学者还是有经验的开发人员,都可从本专栏获益。 订阅专栏后添加我微信或者进交流群,进群可找我领取 前端/Java

    2023年04月11日
    浏览(60)
  • 【Java基础篇】方法的使用(方法的重载和递归)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏 :Java.SE,本专栏主要讲解运算符,程序逻辑控制,方法的使用,数组的使用,类和对象,继承和多态,抽象类和接口等内容 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 在

    2024年02月09日
    浏览(54)
  • [office] Excel中函数进行计算两个日期参数差值的方法 #职场发展#学习方法#媒体

    Excel中函数进行计算两个日期参数差值的方法 在excel使用中,如果想计算两个日期参数的差值,该用什么函数和如何使用呢?今天,小编就教大家在Excel中函数进行计算两个日期参数差值的方法。 Excel中函数进行计算两个日期参数差值的步骤 在excel中计算两个日期参数的差值,

    2024年02月20日
    浏览(49)
  • 【JAVA杂货铺】一文带你走进面向对象编程|继承|重载|重写|期末复习系列 | (中4)

    🌈个人主页:  Aileen_0v0 🔥系列专栏 :Java学习系列专栏 💫个人格言:\\\"没有罗马,那就自己创造罗马~\\\"   目录 继承  私有成员变量在继承中的使用​编辑  当子类和父类变量不重名时: 当子类和父类重名时:  📝总结: 继承的含义: toString方法的作用:  重写和重载的区别 对比狗和

    2024年02月05日
    浏览(58)
  • 【Java基础篇】一文搞懂Java方法的调用与重载(超详细)

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 概念 :在Java中,方法是一段包含了一系列语句的可重用代码块。方法用于执行特定的任务或操作,并且可以带有输入参数和返回值。 方法的意义 :J

    2024年02月11日
    浏览(42)
  • 重载和重写有什么区别

    重载和重写是Java中两个重要的概念。重载可以实现本类内的方法多态性,重写可以实现子类或实现类的多态性。 一、重载 在自然语言中,经常会出现“一词多义”的现象。比如:“墨水”,它可以指一种含有色素或染料的液体,墨水被用于书写或绘画;还可以指人的文化、

    2023年04月08日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包