在 Dart 中,继承是一个重要的概念。当一个子类继承自父类时,有时需要调用父类的构造函数来初始化父类的状态。本章将详细介绍如何在 Dart 中调用父类构造函数。
子类和父类
首先,我们来了解一下什么是子类和父类。子类是从另一个类派生出来的类,它继承了父类的所有属性和方法,并且可以添加新的属性和方法或重写已有的方法。
创建一个简单的父类
让我们从创建一个简单的父类开始。这个类将有一个构造函数,用于初始化其状态。
// javascriptcn.com 代码示例 class Animal { String name; int age; // 父类构造函数 Animal(this.name, this.age); void displayInfo() { print('Name: $name'); print('Age: $age'); } }
在这个例子中,Animal
类有两个实例变量 name
和 age
,并且有一个构造函数来初始化这些变量。此外,还有一个 displayInfo
方法,用于显示动物的信息。
创建子类并调用父类构造函数
接下来,我们将创建一个子类 Dog
,该子类继承自 Animal
类,并在构造函数中调用父类的构造函数。
创建子类
// javascriptcn.com 代码示例 class Dog extends Animal { String breed; // 子类构造函数 Dog(String name, int age, this.breed) : super(name, age); // 调用父类构造函数 void bark() { print('$name is barking!'); } }
在上面的代码中,Dog
类继承自 Animal
类,并且在构造函数中使用了 super
关键字来调用父类的构造函数。这使得 Dog
类的实例对象能够继承 Animal
类的属性和方法。
使用子类
现在,我们可以创建一个 Dog
类的实例并调用其方法。
// javascriptcn.com 代码示例 void main() { Dog myDog = Dog('Buddy', 3, 'Golden Retriever'); // 调用父类的方法 myDog.displayInfo(); // 调用子类特有的方法 myDog.bark(); }
上述代码创建了一个名为 myDog
的 Dog
对象,并调用了其 displayInfo
和 bark
方法。
默认构造函数和命名构造函数
除了默认构造函数之外,还可以使用命名构造函数来调用父类构造函数。
使用命名构造函数
// javascriptcn.com 代码示例 class Cat extends Animal { String color; // 默认构造函数 Cat(String name, int age, this.color) : super(name, age); // 命名构造函数 Cat.purebred(String name, int age, this.color, {required String breed}) : super(name, age), _breed = breed; String _breed; // 私有变量 void purr() { print('$name is purring.'); } void displayBreed() { print('Breed: $_breed'); } } void main() { Cat myCat = Cat('Whiskers', 2, 'White'); myCat.displayInfo(); myCat.purr(); Cat anotherCat = Cat.purebred('Mittens', 4, 'Black', breed: 'Siamese'); anotherCat.displayInfo(); anotherCat.displayBreed(); anotherCat.purr(); }
在这个例子中,Cat
类有两个构造函数:一个是默认构造函数,另一个是命名构造函数 Cat.purebred
。命名构造函数允许我们在创建对象时传递更多的参数,并且可以在构造函数体内进行更复杂的初始化操作。
总结
通过本章的学习,您应该了解了如何在 Dart 中调用父类构造函数。这对于创建具有复杂继承关系的类非常重要。记住,使用 super
关键字来调用父类构造函数,并且可以通过默认构造函数或命名构造函数来实现这一点。