博客
关于我
重载和重写的区别:
阅读量:500 次
发布时间:2019-03-07

本文共 1649 字,大约阅读时间需要 5 分钟。

方法重载与重写解析:

理解Java编程中的方法重载与重写是每一个Java开发人员必须掌握的关键概念。本文将详细阐述这两个概念的不同点,并帮助你更好地理解其在实际编程中的应用。

在Java编程中,重载(Overloading)是指在类中定义多个方法,方法名相同,但参数列表各至少有一个不同。在这里,参数列表中的类型、数量和顺序也视为区别。这使得在调用不同参数的方法时,可以通过传递不同数量和类型的参数来调用适当地重载方法。

需要注意的是,重载仅与修改符和返回类型无关。重载是根据参数列表的差异而确定的,而不是根据方法的访问级别或返回值类型。例如,可以定义两个具有相同修饰符和返回值类型,但参数列表不同的重载方法。

例如:

public void myMethod(int a) { ... }

public void myMethod(double a) { ... }

这两个方法就是一个重载:它们有相同的名称、修饰符和返回值类型,但参数列表不同。

重写(Override)与重载相对,它发生在类继承的关系中。当子类需要提供与父类方法相同签名的方法时,才会发生重写。这通常是在子类需要提供与父类不同的行为或者扩展现有功能时进行。

要进行重写,子类方法的名称、修饰符、返回值类型和参数列表必须与父类方法完全一致。这意味着:

  • 方法名必须完全相同

  • 修饰符必须完全一致

  • 返回类型必须完全一致

  • 参数列表必须完全一致

如果父类方法是静态的,则子类不能重写它。如果父类方法是私有,则子类也不能重写它。

但是,如果父类的方法是public的或protected的,则子类可以选择重写它。不过,在重写时,子类方法必须声明为与父类方法一致。否则将导致编译错误。

重写的方法必须在类继承中进行,并且通常用于实现某种特殊行为。例如:

class Dog extends Animal {

@Overridepublic void eat() {    System.out.println("Dog is eating...");}

}

在这个例子中,如果Animal类定义为父类:

public class Animal {

public abstract void eat();public void eat(){    System.out.println("Animal is eating...");}

}

注意:如果子类中没有提供与父类完全相同的方法签名,或者父类的方法是static的,子类就不能进行重写。这是重要的,因为它决定了哪些方法可以在继承中被修改。

此外,重写的方法必须遵守与父类相同的异常类型。这意味着,如果父类方法抛出了某种异常,子类重写方法也必须声明抛出与之相同或者更具体的异常类。如果父类的方法没有声明抛出异常,子类重写方法也不能抛出更广泛的异常。

例如,如果父类方法:

public void myMethod()throws IOException {

// code

}

那么子类重写方法需要声明相同或更具体的异常:

@Override

public void myMethod()

throws IOException {// 子类实现

}

如果试图抛出更大范围的异常,如ClassNotFoundException,就会产生编译错误。

综上所述,重载和重写是Java编程中的两个核心概念,理解它们的区别和特点对于编写高质量的代码至关重要。重载用于在类中提供多个参数格式的方法,而重写用于在继承中覆盖父类的方法。

在实际编程中,理解什么时候使用重载和重写是至关重要的。重载允许你为不同的参数组合提供相同的方法名,而重写允许你为子类提供与父类相同方法的不同实现。在设计类和继承关系时,准确地理解这两者的用途将有助于您写出更灵活、更可靠的代码。

总之,重载和重写是面向初学Java程序员的重要知识点,通过理解它们的差异,你将能够更好地利用Java的强大功能来构建更复杂和实用的应用程序。

转载地址:http://dnljz.baihongyu.com/

你可能感兴趣的文章
Android Launcher 之源码下载
查看>>
设计模式(18)——中介者模式
查看>>
net start mysql 发生系统错误2 系统找不到指定的文件
查看>>
发工资的骚操作。。
查看>>
送一个ipad【最后一个】
查看>>
重磅!大数据《实战全栈工程师成长手册》,附 PDF & PPT 下载
查看>>
JAVA异常和基础类库
查看>>
洛谷【数据结构1-1】线性表
查看>>
AI技术国际领先!一文回顾百度大脑的2020
查看>>
CVPR 2021 | 港科大&旷视提出ACON:激活还是不激活?学习自定义激活函数
查看>>
EfficientNetV2震撼发布!更小的模型,更快的训练
查看>>
python-计网实验二-套接字
查看>>
C++学习日记2——多态篇的纯虚函数和抽象类
查看>>
F - 数据结构实验之链表四:有序链表的归并
查看>>
为什么使用%lf读取double型的值,而用%f进行显示?
查看>>
用JavaScript实现希尔排序
查看>>
iconfont字体图标导入到vue项目中
查看>>
2020.11.30-12.6周报
查看>>
3dTile技术研究-小结
查看>>
Nuxt.js服务器端渲染框架
查看>>