(第一次在Stackoverflow发帖,所以如果我做错了,我很抱歉=()
从类创建对象或从其继承的类创建对象有什么区别?
如您所见,我使用一种方法“MakeSound”创建了一个 Animal 类,然后创建了两个类“Cat”和“Dog”,它们继承自 Animal 类,并覆盖了默认的 Animal 类。到目前为止,没有什么奇怪的,只是一些基本的继承和多态性。但当创建对象时出现了一个问题。我用两种不同的方式制作了这些物体:
Cat cat1 = new Cat();
Animal cat2 = new Cat();
一个是用 Cat 类创建的,另一个是用超类 Animal 类创建的。这两者之间有有很大区别吗?我可以看到一些区别,您可以创建包含不止一种动物的列表:
Animal[] animals = new Animal[2];
animals[0] = new Cat();
animals[1] = new Dog();
我想它不会在以猫或狗对象作为参数的方法中使用这些,但除此之外。差别有这么大吗
当子类上有未在超类上声明的方法时,差异就变得很明显:
class Animal {
public abstract void MakeSound();
}
class Cat : Animal {
public override void MakeSound() {
this.Meow();
}
public void Meow() {
Console.WriteLine("meow.");
}
}
Cat cat1 = new Cat();
Animal cat2 = new Cat();
cat1.MakeSound(); // works
cat1.Meow(); // works
cat2.MakeSound(); // works
cat2.Meow(); // compile error