使用主/子类“Cat cat1 = new Cat(); 与 Animal cat2 = new Cat();”创建对象之间的区别

问题描述 投票:0回答:1

(第一次在Stackoverflow发帖,所以如果我做错了,我很抱歉=()

从类创建对象或从其继承的类创建对象有什么区别?

我编写了这段代码:enter image description here

如您所见,我使用一种方法“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();

我想它不会在以猫或狗对象作为参数的方法中使用这些,但除此之外。差别有这么大吗

c# inheritance polymorphism
1个回答
0
投票

当子类上有未在超类上声明的方法时,差异就变得很明显:

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
© www.soinside.com 2019 - 2024. All rights reserved.