dart - 关于飞镖文档中“替换类型”的问题
问题描述
阅读“Dart 类型系统”中的“替换类型”部分,我不明白为什么从层次结构的上一层分配时会出现错误。
class Animal { }
class Cat extends Animal { }
class MaineCoon extends Cat { }
Animal c = Cat();
适用于编译器,但MaineCoon c = Cat();
得到不正确的构造函数错误。
我不明白为什么MaineCoon
不能转换为Cat
,但Animal
可以转换
Cat
甚至Animal c = MaineCoon();
仍然有效。
解决方案
简短的回答(见下面的源代码)
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
从实例访问?Cat
Cat
maineCoonName
PS
即使maineCoonName
没有声明这个成员(我的意思是 ),这并不意味着以后不会添加类似的成员,这原则上会破坏整个程序。