首页 > 解决方案 > 关于飞镖文档中“替换类型”的问题

问题描述

阅读“Dart 类型系统”中的“替换类型”部分,我不明白为什么从层次结构的上一层分配时会出现错误。

class Animal { }
class Cat extends Animal { }
class MaineCoon extends Cat { }

Animal c = Cat();适用于编译器,但MaineCoon c = Cat();得到不正确的构造函数错误。

我不明白为什么MaineCoon不能转换为Cat,但Animal可以转换
Cat甚至Animal c = MaineCoon();仍然有效。

标签: dart

解决方案


简短的回答(见下面的源代码)

void main() {
  Animal animal = Cat();
  print(animal.animalName);
  MaineCoon maineCoon = Cat();
  // Opps!!! The "Cat" does not declares "maineCoonName".
  print(maineCoon.maineCoonName);
}

class Animal {
  String animalName = 'animal';
}

class Cat extends Animal {
  String catName = 'cat';
}

class MaineCoon extends Cat {
  String maineCoonName = 'maineCoonName';
}

如果没有声明成员,您如何想象maineCoonName从实例访问?CatCatmaineCoonName

PS
即使maineCoonName没有声明这个成员(我的意思是 ),这并不意味着以后不会添加类似的成员,这原则上会破坏整个程序。


推荐阅读