Dart的抽象类是为那些包含一个或多个抽象方法(没有实现的方法)的类定义的。而要声明抽象类,我们使用abstract关键字。因此,必须注意,声明为抽象的类可能包含也可能不包含抽象方法,但如果它包含抽象方法,则它必须是抽象类。
抽象类的特点:
- 包含抽象方法的类必须声明为抽象的,而声明为抽象的类可能有也可能没有抽象方法,即它可以有抽象或具体的方法
- 一个类只能使用abstract关键字声明为抽象类。
- 不能初始化声明为抽象的类。
- 抽象类可以扩展,但是如果继承抽象类,则必须确保其中的所有抽象方法都提供了实现。
通常,抽象类用于实现扩展子类的抽象方法。
句法:
abstract class class_name {
// Body of the abstract class
}
覆盖抽象类的抽象方法 –
Dart
// Understanding Abstract class in Dart
// Creating Abstract Class
abstract class Gfg {
// Creating Abstract Methods
void say();
void write();
}
class Geeksforgeeks extends Gfg{
@override
void say()
{
print("Yo Geek!!");
}
@override
void write()
{
print("Geeks For Geeks");
}
}
main()
{
Geeksforgeeks geek = new Geeksforgeeks();
geek.say();
geek.write();
}
Dart
// Understanding Abstract Class In Dart
// Creating Abstract Class
abstract class Gfg {
// Creating Abstract Method
void geek_info();
}
// Class Geek1 Inheriting Gfg class
class Geek1 extends Gfg {
// Overriding method
@override
void geek_info()
{
print("This is Class Geek1.");
}
}
// Class Geek2 Inheriting Gfg class
class Geek2 extends Gfg {
// Overriding method again
@override
void geek_info()
{
print("This is Class Geek2.");
}
}
void main()
{
Geek1 g1 = new Geek1();
g1.geek_info();
Geek2 g2 = new Geek2();
g2.geek_info();
}
输出:
Yo Geek!!
Geeks For Geeks
解释:
首先,我们声明一个抽象类 Gfg 并在其中创建一个抽象方法 geek_info。之后,我们将 Gfg 类扩展到第二个类并覆盖方法 say() 和 write(),这会产生它们各自的输出。
笔记:
当只有一个类扩展抽象类时,重写方法不是强制性的,因为重写用于更改预定义的代码,并且在上面的情况下,方法内部没有定义任何内容,因此上面的代码将起作用没有覆盖就好了。
在两个不同的类中覆盖抽象类的抽象方法 –
Dart
// Understanding Abstract Class In Dart
// Creating Abstract Class
abstract class Gfg {
// Creating Abstract Method
void geek_info();
}
// Class Geek1 Inheriting Gfg class
class Geek1 extends Gfg {
// Overriding method
@override
void geek_info()
{
print("This is Class Geek1.");
}
}
// Class Geek2 Inheriting Gfg class
class Geek2 extends Gfg {
// Overriding method again
@override
void geek_info()
{
print("This is Class Geek2.");
}
}
void main()
{
Geek1 g1 = new Geek1();
g1.geek_info();
Geek2 g2 = new Geek2();
g2.geek_info();
}
输出:
This is Class Geek1.
This is Class Geek2.
解释:
首先,我们声明一个抽象类 Gfg 并在其中创建一个抽象方法 geek_info。之后,我们将 Gfg 类扩展到另外两个类,并覆盖了 geek_info 方法,这会产生两个不同的输出字符串。
在这段代码中,我们必须使用 override 来重新定义两个不同类中的方法。如果我们在上面的例子中不使用覆盖将给出如下结果:
This is Class Geek1
This is Class Geek1
相同的结果被打印了两次,因为该方法没有在下一个类中重新定义。