方法重载和重写跟方法的覆盖和隐藏是一样的吗?
时间: 2024-03-31 09:34:39 浏览: 64
方法重载和重写与方法的覆盖和隐藏是不同的概念。
方法重载是指在一个类中定义多个方法,它们具有相同的方法名但是参数列表不同。在调用时,根据传递的参数类型和数量的不同,编译器会自动匹配调用对应的方法。
方法重写是指在子类中重新实现父类中已有的方法,使用@Override注解进行标识。当调用该方法时,会优先调用子类中的方法,如果没有则会调用父类中的方法。
方法的覆盖和隐藏是指子类中定义了与父类中同名同参数列表的方法。当调用该方法时,如果使用父类的引用调用,会调用父类中的方法;如果使用子类的引用调用,会调用子类中的方法。如果子类想要调用父类中的方法,可以使用super关键字。
因此,方法重载和重写是在同一个类中进行的,而方法的覆盖和隐藏是在继承关系中进行的。
相关问题
java中什么是方法的覆盖?什么是变量的隐藏?方法的覆盖与方法的重载有什么区别?
在 Java 中,方法的覆盖(也叫重写)是指当一个子类拥有与父类同名、参数列表完全相同的方法时,子类的方法会替换掉父类的方法的行为。也就是说,如果满足覆盖条件,对子类对象调用该方法时,将执行子类的方法,而不是父类的。
例如:
```java
class Animal {
public void sound() { System.out.println("Animal makes a sound"); }
}
class Dog extends Animal {
@Override
public void sound() { System.out.println("Dog barks"); }
}
```
在这个例子中,`Dog`类覆盖了`Animal`类的`sound()`方法,当创建`Dog`对象并调用`sound()`时,输出将是"Dog barks"。
而变量的隐藏(也叫隐藏)则是指子类中声明了一个与父类同名的成员变量(通常是私有或受保护的),那么这个成员变量就会遮盖父类的同名变量,但在子类内部可以正常使用父类的变量。
方法的覆盖与重载的主要区别在于:
1. **重载**是同名的不同方法,区别在于方法的参数列表(参数类型和数量)不同。编译期确定调用哪一个重载的方法。
2. **覆盖**是方法名称相同、参数列表也相同的实例方法,发生在子类继承父类的情况下,运行时动态确定实际执行的是子类的方法。
重写,重载和覆盖的区别
重写(Override)、重载(Overload)和覆盖(Shadow)是面向对象编程中常用的三个概念,它们的区别如下:
1. 重写(Override):是指子类重新实现(或修改)了从父类继承来的方法,使得该方法能够满足子类的需求。在重写中,子类必须保持相同的方法名称、参数列表和返回类型。重写是实现多态的关键。
2. 重载(Overload):是指一个类中有多个同名的方法,但它们的参数列表不同。在重载中,编译器根据方法的参数列表来区分不同的方法。重载是实现多态的一种方式。
3. 覆盖(Shadow):是指子类定义了一个与父类同名的方法,但它们的参数列表不同。在覆盖中,子类的方法会屏蔽(或隐藏)父类的方法,使得在子类中只能访问到子类的方法。
总之,重写、重载和覆盖都是实现多态的方式,它们的区别在于参数列表和方法实现的不同。重写和覆盖的方法名称必须相同,而重载的方法名称必须相同但参数列表不同。
阅读全文