父类在调用方法时 如果子类有重写过的方法 会执行子类重写后的
时间: 2024-09-25 16:07:32 浏览: 43
当你在父类中调用一个已经被子类重写的方法时,Java会动态地依据实际的对象类型来决定执行哪个版本的方法。这种机制叫做方法重写(Override),它实现了多态的一个关键特性。无论你使用的是父类引用还是父类型的实例,只要这个实例是子类的实际对象,那么就会执行子类中定义的重写方法。这使得程序设计更加灵活,可以根据实际情况处理不同的情况。
举个例子:
```java
class Animal {
public void sound() {
System.out.println("Animal makes a generic sound");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
}
// 使用父类引用调用
Animal animal = new Dog(); // 创建一个Dog对象并赋值给Animal类型的变量
animal.sound(); // 输出 "Dog barks",尽管我们使用的引用是Animal类型
```
在这个例子中,`sound()` 方法在Dog类中被重写了,所以当我们通过Animal类型的引用调用它时,实际上是执行了Dog类的方法。
相关问题
java对象会调用父类的方法还是子类对父类重写的方法
Java中,对象调用方法的时候会优先调用子类中对父类方法的重写(Override),如果子类没有重写该方法,则会调用父类的方法。这就是Java中的方法重写机制。
例如,如果有如下的代码:
```java
public class ParentClass {
public void print() {
System.out.println("I am ParentClass");
}
}
public class ChildClass extends ParentClass {
@Override
public void print() {
System.out.println("I am ChildClass");
}
}
public class Test {
public static void main(String[] args) {
ParentClass obj = new ChildClass();
obj.print();
}
}
```
当执行 `obj.print()` 时,会输出 "I am ChildClass",因为子类 `ChildClass` 重写了 `ParentClass` 的 `print()` 方法。
需要注意的是,如果想在子类中调用父类被重写的方法,可以使用 `super` 关键字来实现,例如:
```java
public class ChildClass extends ParentClass {
@Override
public void print() {
super.print(); // 调用父类的 print() 方法
System.out.println("I am ChildClass");
}
}
```
这样,在执行 `obj.print()` 的时候,会先输出 "I am ParentClass",再输出 "I am ChildClass"。
python 子类方法重写后,如何调用父类方法
在Python中,如果你有一个子类并重写了父类的方法,你可以通过以下几种方式调用原父类的方法:
1. **`super()`函数**:这是最推荐的方式,它允许你在子类方法内部访问并调用父类的同名方法。例如:
```python
class ParentClass:
def parent_method(self):
print("This is the parent method.")
class ChildClass(ParentClass):
def child_method(self):
super().parent_method() # 调用父类方法
print("This is the child method.")
```
2. **使用`.`操作符**: 如果你想明确指定父类对象,可以先创建一个父类的实例,然后通过`.`来调用父类方法:
```python
class ParentClass:
def parent_method(self):
print("This is the parent method.")
class ChildClass(ParentClass):
def child_method(self):
parent_instance = ParentClass()
parent_instance.parent_method() # 调用父类方法
print("This is the child method.")
```
无论是哪种方式,都可以让你在子类的方法中保留对父类方法的访问权限,实现了多态。
阅读全文