`

Java中重载(Overload)与重写(Override)

    博客分类:
  • Java
阅读更多
1. 重载(Overload)

重载(Overload)是在一个类里面,方法名字相同,而参数不同。

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

1. 被重载的方法必须改变参数列表(参数个数或类型不一样);
2. 被重载的方法可以改变返回类型;
3. 被重载的方法可以改变访问修饰符;
4. 被重载的方法可以声明新的或更广的检查异常;
5. 方法能够在同一个类中或者在一个子类中被重载;
6. 无法以返回值类型作为重载函数的区分标准;

public class OverloadTest{
    public int add(int a ,int b){
        return a + b;
    }
    public int add(int a, int b, int c){
        System.out.println(add(a, b));
        return a + b + c;
    }
    public static void main(String[] args){
        OverloadTest test = new OverloadTest();
        int result = test.add(1, 2);
        int result2 = test.add(1, 2, 3);
        System.out.println(result);
        System.out.println(result2);
    }
}


2. 重写(Override)

重写(Override)是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

重写的好处在于子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法,当需要在子类中调用父类的被重写方法时要使用super关键字。
重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。

1. 参数列表必须完全与被重写方法的相同;
2. 返回类型必须完全与被重写方法的返回类型相同;
3. 访问权限不能比父类中被重写的方法的访问权限更低;
4. 重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常;
5. 声明为final的方法不能被重写;
6. 声明为static的方法不能被重写,但是能够被再次声明;
7. 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法;
8. 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法;
9. 父类的成员方法只能被它的子类重写;
10. 构造方法不能被重写;
11. 如果不能继承一个方法,则不能重写这个方法;

public class InheritenceTest3{
    public static void main(String[] args){
        Son son = new Son();
    }
}
class Grandpa{
    public Grandpa(){
        System.out.println("grandpa");
    }
}
class Father extends Grandpa{
    public Father(){
        System.out.println("father");
    }
}
class Son extends Father{
    public Son(){
        System.out.println("son");
    }
}


3. 对比(Override)

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


分享到:
评论

相关推荐

    java 重载(overload)与重写(override)详解及实例

    主要介绍了java 重载(overload)与重写(override)详解及实例的相关资料,并附实例代码,需要的朋友可以参考下

    重写(override)和重载(overload)的区别

    C#中方法的重写(override)和重载(overload)的区别

    Java重写(Override)&重载(Overload).pdf

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

    Java 重写(Override)与重载(Overload).pdf

    java

    Java重写(Override)与重载(Overload)区别原理解析

    主要介绍了Java重写(Override)与重载(Overload)区别原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java重载和重写的区别--源码实例

    // 对overload测试的文件:OverloadTest.java public class OverloadTest { // 下面几个方法用来验证可以通过定义不同的参数类型和参数的数目进行方法重载。 public void fun(){ System.out.println("method ...

    Java overload和override的区别分析

    方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,想要了解更多请参考本

    PHP中overload与override的区别

    override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比...重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个类中多态

    Java复习大纲面试题.doc

    方法重载与方法重写的区别? 方法重载(Overload):是指方法名字相同,参数的个数、类型、次序不同。 方法重写(Override/Overwrite):是指子类重写了从父类继承过来的方法。 区别:方法重载没有继承、属于一种静态联编...

    C++中overload,override,overwrite的区别详细解析

    Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;...

    java面试题

    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,...

    java 接口 类 继承 多态的简单实例

    实现重载(overload)和重写(override) 调用中用到多态,向上转换,强制转换 所有被创建的类,都各自创建两个实现接口 最底层的类中创建内部类,并在外部类中调用内部类的方法

    SCJP考试题集 有详细解析

    此题涉及方法重载(overload),方法重写(override)以及类派生时方法重写的规则。方法重载的规则是:一、参数列表必须不同,个数的不同 完全可以,如果个数相同则参数类型的不同不能引起歧意,例如int 和long,...

    java笔试题

    20、重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分? 21、描述一下JVM加载class文件的原理机制? 22、char 型变量中能不能存贮一个中文汉字,为什么? 23、抽象类(abstract class...

    浅谈C++重载、重写、重定义

    一、重载(overload) 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。 (1)相同的范围(在同一个作用域中) ; (2)函数名字相同; (3)参数不同; (4)virtual 关键字...

    PHP重载基础知识回顾

    先区分一下重载(overload)和重写(override):重载指多个名字相同,但参数不同的函数在同一作用域并存的现象;重写出现在继承中,指子类重定义父类功能的现象,也被称为覆盖。重载中说的参数不同有三种情况:参数个...

    JAVA基础课程讲义

    方法的重载(overload),构造方法的重载 63 this关键字 65 static 关键字 66 静态初始化块(经常用来初始化类,加载类信息时执行!) 67 package 68 JDK中的主要包 68 import 68 eclipse的使用 69 继承(extend, ...

    JAVA面试题最全集

    81.UML中,类视图如何表示类中的继承与聚合? 82.客户端游标与服务器端游标的区别? 83.动态游标与静态游标的区别? 84.dotnet由哪几个基本框架组成? 85.Oracle中SGA是什么? 86.web servers是什么? 87.UNIX中QT是...

    java 面试题 总结

    重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,...

Global site tag (gtag.js) - Google Analytics