抽象类中的非抽象方法如何调用
时间: 2023-08-11 12:13:16 浏览: 65
在抽象类中定义的非抽象方法可以被子类继承并调用。当子类实例化后,可以通过子类的对象来调用非抽象方法。
例如,假设有一个抽象类Animal,其中定义了一个非抽象方法run:
```python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def move(self):
pass
def run(self):
print("Animal is running")
```
现在有一个子类Dog,它继承了Animal类。在Dog类中,可以直接调用Animal类中的非抽象方法run:
```python
class Dog(Animal):
def move(self):
print("Dog is moving")
dog = Dog()
dog.run() # 输出 "Animal is running"
```
在这个例子中,Dog类继承了Animal类,并实现了其中的抽象方法move。在实例化Dog类后,我们可以通过dog对象来调用Animal类中的非抽象方法run。注意,我们不需要在Dog类中重新定义run方法,因为它已经在Animal类中被定义了。
相关问题
抽象类中的非抽象方法
抽象类中的非抽象方法是指在抽象类中定义的具体实现的方法,这些方法可以直接被子类继承和使用。与抽象方法不同,非抽象方法在抽象类中已经有了默认的实现,子类可以选择性地对其进行重写或者直接使用。
下面是一个示例,展示了抽象类中的非抽象方法的使用:
```python
from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def sound(self):
pass
def eat(self):
print("Animal is eating.")
class Dog(Animal):
def sound(self):
print("Dog is barking.")
dog = Dog()
dog.sound() # 输出:Dog is barking.
dog.eat() # 输出:Animal is eating.
```
在上面的示例中,`Animal`是一个抽象类,其中定义了一个抽象方法`sound`和一个非抽象方法`eat`。`Dog`是`Animal`的子类,必须实现抽象方法`sound`,但可以选择性地重写非抽象方法`eat`。在创建`Dog`对象后,我们可以调用`sound`方法和`eat`方法,分别输出"Dog is barking."和"Animal is eating."。
抽象类中的方法怎么调用
抽象类中的方法不能直接调用,因为抽象类本身是用来被继承的,只能被子类实现和调用。抽象类中的方法一般是定义了一些接口或者共有的行为,子类必须实现这些方法才能使用。在子类中,通过重写(覆盖)抽象类中的抽象方法来实现具体的功能,并且可以通过创建子类的对象来调用这些方法。
下面是一个示例,演示了如何使用抽象类和调用其中的方法:
```python
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
pass
class Rectangle(Shape):
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
rectangle = Rectangle(5, 3)
print(rectangle.area()) # 输出:15
```
在上面的示例中,`Shape` 是一个抽象类,其中定义了一个抽象方法 `area()`。`Rectangle` 是 `Shape` 的子类,并且实现了 `area()` 方法。通过创建 `Rectangle` 的对象 `rectangle`,我们可以调用 `area()` 方法来计算矩形的面积。