重写是父类与子类之间多态性的一种表现
时间: 2024-09-30 22:07:45 浏览: 31
在面向对象编程中,重写(Overriding)是父类与子类间多态性的一个关键概念。当一个子类继承自父类后,它可以覆盖或“重写”父类中的同名成员函数(包括方法、属性等),以便提供特定于子类的行为。
**具体说明:**
1. **方法重写(Virtual Function Overriding)**:如果父类有一个声明为`virtual`的方法,子类可以在自己的定义中重新定义这个方法。当从父类创建子类的对象并调用该方法时,实际执行的是子类版本的方法,这就是动态绑定,实现了运行时的多态。
```cpp
class Base {
virtual void doSomething() { std::cout << "Base class" << std::endl; }
};
class Derived : public Base {
void doSomething() override { std::cout << "Derived class" << std::endl; }
};
```
2. **属性或访问器/修改器重写**:对于数据成员,虽然不能直接重写,但可以通过添加新的同名成员来扩展功能,然后使用访问控制权限规则来决定哪个版本的成员被调用。
3. **静态成员函数不重写**:因为静态成员属于类而不是对象,所以子类无法直接重写父类的静态函数。
理解重写对于设计灵活的软件架构至关重要,因为它允许你编写更通用的接口,而具体的实现细节可以在派生类中进行优化或定制。
相关问题
【判断题】重写和重载是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现
这道题是错的。
重写(override)和重载(overload)是Java中两种不同的方法实现方式,它们都属于Java中的多态性(polymorphism)。重写是指子类可以重写(覆盖)从父类继承而来的方法,以实现自己的功能需求,重载是指在一个类中定义多个同名的方法,但是这些方法的参数类型、数量或顺序不同,以适应不同的操作需求。
因此,重写和重载都是Java中多态性的表现,但是它们的具体实现方式不同。重写是父类与子类之间多态性的一种表现,而重载是一个类中多态性的一种表现。
Java子类重写父类同名方法
在Java中,子类重写父类同名方法是一种实现多态的方式,也称为方法覆盖(Method Overriding)。当子类有一个与父类同名、同参数列表并且返回类型相同的函数时,子类就实现了对父类方法的重写。这使得子类可以在保持公共接口不变的情况下,提供自定义的行为。
以下是一个简单的例子:
```java
class ParentClass {
public void printMessage() {
System.out.println("这是ParentClass的方法");
}
}
class ChildClass extends ParentClass {
// 子类重写了printMessage方法
@Override
public void printMessage() {
System.out.println("这是ChildClass重写后的消息");
}
}
public class Main {
public static void main(String[] args) {
ParentClass parent = new ParentClass(); // 创建父类实例
parent.printMessage(); // 输出 "这是ParentClass的方法"
ChildClass child = new ChildClass(); // 创建子类实例
child.printMessage(); // 输出 "这是ChildClass重写后的消息"
}
}
```
在这个例子中,当你通过`child`对象调用`printMessage()`时,实际上会执行`ChildClass`的版本,体现了多态性。
阅读全文