今天有个朋友问我重载与覆盖的区别,所以我就写好了发给他。在这贴出来让不明白的
软件工程师也看看。
Overload译为重载;Override译为重写或者覆盖;
Overload讨论:
Java中同一个类不可以有两个相同的方法(方法名、参数类型、参数个数和参数位置都
相同)。但可以有方法名相同,参数不同(参数类型、参数个数和参数位置不相同)的方法。这
种相同的方法名,参数不同的方法称为重载。
public class Test {
public void fn(String name) {}
public void fn(int age) {}
public void fn(String name, int age) {}
public void fn(int age, String name) {}
}
这个相信大家都知道,那么不同返回类型或者抛出的异常声明可以重载吗?答案是不可
以,那么为什么不可以呢?
public class Test {
public void fn(String name) {}
public String fn(String name) { //Error
return null;
}
public void fn(String name) throws Exception {} //Error
}
因为返回类型和抛出的异常声明是在执行完该方法(运行时)才知道的,所以fn
("Bruce")调用程序不知道去执行哪一个方法。
Override讨论:
重写意味着子类重写了一个和父类一样的方法,将父类的方法给覆盖掉了。
class Parent {
public void fn() {
int i = 1 + 1;
}
}
class Son extends Parent {
public void fn() {
int i = 8 - 3;
}
}
那么子类方法返回类型或者抛出的异常声明和父类不同是否可以?不可以,Java编译要
求子类方法返回类型必须和父类相同,抛出的异常声明可以小于或等于父类。
class Parent {
public void fn() throws RuntimeException {
int i = 1 + 1;
}
}
class Son1 extends Parent {
public void fn() {
int i = 8 - 3;
}
}
//NullPointerException是RuntimeException子类,所以可以
class Son2 extends Parent {
public void fn() throws NullPointerException {
int i = 8 - 3;
}
}
//RuntimeException和NullPointerException都可以上塑转型为RuntimeException,所以可以
class Son3 extends Parent {
public void fn() throws RuntimeException, NullPointerException {
int i = 8 - 3;
}
}
//Exception是RuntimeException的父类,大于RuntimeException类,所以不可以
class Son4 extends Parent { //Error
public void fn() throws Exception {
int i = 8 - 3;
}
}
分享到:
相关推荐
在Java编程语言中,方法的重载(Overloading)与重写(Overriding)是两个非常重要的...通过对比分析,我们可以更加清晰地理解Java中重载与重写之间的区别及其应用场景。这对于编写高效、可维护的Java代码至关重要。
重写发生在父类和子类之间,当子类继承父类时,如果子类定义了一个与父类中已存在的方法同名、同参数列表的方法,那么子类中的这个方法就是对父类方法的重写。重写的主要目的是为了在子类中改变或扩展父类的功能。在...
在C++面向对象编程中,理解重载、重写(覆盖)以及隐藏的概念至关重要。这些概念不仅有助于我们更好地设计类和继承体系,还能帮助我们避免一些常见的编程陷阱。本文将详细介绍这三个概念,并通过具体的代码示例来...
通过本文的介绍,读者应该对 Java 中如何实现方法的重载和重写有了深入的理解。掌握这两种技术,将能够编写出更加灵活和可扩展的 Java 代码。在实际编程过程中,建议根据项目的具体情况调整和应用这些技巧,以达到...
从虚拟机的角度理解重载和重写说明:本文主要内容都参考至《深入Java虚拟机-周志明著》Class文件的编译过程中不包含传统程序语言编译的连接步骤,一切方法的调用
### 重载、重写、覆盖与多态的深刻剖析 在面向对象编程语言中,如Java、C#等,重载(Overloading)、重写(Overriding)、覆盖(也称为重写)以及多态(Polymorphism)是几个非常重要的概念。它们之间既有关联又有...
#### 重写与覆盖的应用示例: 考虑以下代码片段: ```csharp public class ParentClass { public virtual void VirtualMethod() { Console.WriteLine("ParentClass's VirtualMethod"); } } public class ...
Java 中的重载(Overloading)和重写(Overriding)是两个重要的概念,它们都是实现多态性的重要方式,但两者之间存在着显著的区别。...理解并掌握重载和重写的概念对于编写灵活、可扩展的Java代码至关重要。
Java 中的重载(Overloading)与重写(Overriding)是两个重要的概念,它们都是实现多态性的重要方式,但两者之间存在着显著的区别。 **重载(Overloading)** 重载是指在同一个类中可以有多个同名方法,但这些...
在PHP面向对象编程中,重载(Overloading)和重写(Overriding)是两个重要的概念,它们都与多态性有关。...希望本文的内容能够帮助大家更深入地理解重载与重写,进而在实际开发工作中发挥它们的优势。
Java编程语言中的重载...理解并熟练运用重载和重写是提升Java编程能力的关键步骤,它们使代码更加灵活和易于维护,同时增强了面向对象设计的特性。在实际开发中,合理利用这两个特性可以提高代码的复用性和可扩展性。
在编程语言中,方法重载(Overloading)和方法...理解并熟练运用方法重载和重写,可以提高代码的可读性和灵活性,降低耦合度,使得程序更加模块化和易于维护。在实际开发中,这两种机制是面向对象编程不可或缺的部分。
我根据我的理解来谈谈Java中重写方法与重载方法的区别。 重写 Java 中重写又叫覆盖,主要是指继承(extends)父类或者实现(implements)接口时将父类或者接口中已经存在的方法进行重新定义。重写的方法在父类...
在C++编程语言中,"重载"(Overloading)、"重写"(Overriding)和"重定义"(Redefinition)是三个关键的概念,它们对于理解和掌握面向对象编程至关重要。下面将详细阐述这三个概念及其在实际编程中的应用。 **1. ...
Java中的重载(Overloading)和重写(Overriding)是面向对象编程中的两种关键特性,它们涉及到方法的多态性。理解这两者的区别对于编写高效、可维护的代码至关重要。 **重载(Overloading)**是指在一个类中,可以有多个...
在Java编程语言中,"重载"(Overloading)和"重写"(Overriding)是两个非常重要的概念,它们都是面向对象特性的重要体现。理解并掌握这两个概念对于编写高效、可维护的代码至关重要。 首先,我们来谈谈“重载”...
面向对象是Java编程的核心概念,其中“重载”(Overloading)和“重写”(Overriding)是两个至关重要的概念。理解并熟练运用这两个概念,对于提升Java编程能力至关重要。 首先,我们来探讨“重载”。在Java中,...
1. 了解和掌握重载与重写的概念对于理解和应用Java的面向对象编程至关重要。 2. 重载关注的是方法签名(名称+参数列表),而重写关注的是子类如何扩展或改变父类的行为。 3. 多态性使得代码更加灵活,可以提高代码的...
前段时间,刚学完C#,其中重载、重写傻傻分不清楚。如今通过查阅资料对这两者有了一个大概的理解,不足之处还请多多指教。 二、定义 重载:在同一定义域内(比如一个类里面)。方法名相同,参数个数、次序、类型...