在面向对象编程中,抽象类本身不能被实例化,但你可以:
super 调用抽象类的普通或抽象方法实现下面以几种常见语言为例说明。
abstract class Animal {
// 抽象方法
public abstract void sound();
// 具体方法
public void sleep() {
System.out.println("Animal is sleeping");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("Dog barks");
}
public void test() {
sleep(); // 调用抽象类的具体方法
super.sleep(); // 也可以通过 super 调用
}
}
public class Main {
public static void main(String[] args) {
Animal a = new Dog(); // 多态
a.sound(); // 调用子类实现
a.sleep(); // 调用抽象类方法
}
}
✅ 关键点:
new Animal()from abc import ABC, abstractmethod
class Animal(ABC):
@abstractmethod
def sound(self):
pass
def sleep(self):
print("Animal is sleeping")
class Dog(Animal):
def sound(self):
print("Dog barks")
def test(self):
self.sleep()
super().sleep()
d = Dog()
d.sound()
d.sleep()
✅ Python 中:
ABC + @abstractmethodsuper() 调用父类方法#include <iostream>
using namespace std;
class Animal {
public:
virtual void sound() = 0; // 纯虚函数
void sleep() {
cout << "Animal sleeping" << endl;
}
};
class Dog : public Animal {
public:
void sound() override {
cout << "Dog barks" << endl;
}
};
int main() {
Dog d;
d.sound();
d.sleep();
}
❌ 错误:
Animal a = new Animal(); // 抽象类不能实例化
✅ 正确:
Animal a = new Dog();
| 场景 | 是否可调用 |
|---|---|
| 抽象类的抽象方法 | ❌ 不能直接调用 |
| 抽象类的具体方法 | ✅ 可以 |
| 子类实现的方法 | ✅ 可以 |
通过 super 调用 |
✅ 可以 |
如果你指的是某种具体语言(Java / Python / C# / C++)或静态调用、反射调用等场景,可以告诉我,我可以给你更具体的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。