继承和多态之间有什么区别?

Obz*_*ajd 18 c# oop

你能给我一个简单的继承和多态的例子,那么它可以完全清楚易懂吗?

使用C#会让它更清晰,因为我已经学会了它.

PS:导师,我们用的书是用母语,(阿拉伯语)

抱歉,如果这个问题看起来如此简单,对你们来说甚至是愚蠢的,但这些概念被认为是难的; 如果你不完全理解它们,那么你就失败了.

Rus*_*rke 48

这是多态性:

public interface Animal 
{
  string Name { get; }
}

public class Dog : Animal
{
  public string Name { get { return "Dog"; } }
}

public class Cat : Animal
{
  public string Name { get { return "Cat"; } }
}

public class Test 
{
  static void Main()
  {
      // Polymorphism
      Animal animal = new Dog();

      Animal animalTwo = new Cat();

      Console.WriteLine(animal.Name);
      Console.WriteLine(animalTwo.Name);
  }
}
Run Code Online (Sandbox Code Playgroud)

这是继承:

public class BaseClass
    {
        public string HelloMessage = "Hello, World!";
    }

    public class SubClass : BaseClass
    {
        public string ArbitraryMessage = "Uh, Hi!";
    }

    public class Test
    {
        static void Main()
        {
            SubClass subClass = new SubClass();

            // Inheritence
            Console.WriteLine(subClass.HelloMessage);
        }
    }
Run Code Online (Sandbox Code Playgroud)


Dav*_*ras 24

继承意味着如果你创建一个带有公共字段TankSize的类Car,那么你从它派生一个类SuperCar,最后一个类从Car继承了TankSize字段.

多态性是这样一个事实,即每次在代码中你都有一个方法,在这个方法中,你可以通过一辆SuperCar来运行SuperCar,它的行为就像一辆Car.

根据需要定义虚方法,您将在基类上调用方法,但您正在处理的实际对象将执行其虚拟方法的版本,因此您实际上将调用SuperCar.GetPrice而不是Car.GetPrice.

用几句话来说,我看到其他人在我写作时已经在回答.

  • 简单的单词有时不仅仅意味着讲课,感谢分享你的思想清晰度. (5认同)

Rya*_*ier 23

让我用我最喜欢的动词,我们发现:

http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29

http://msdn.microsoft.com/en-us/library/ms173152%28v=vs.80%29.aspx

多态性和继承是C#和面向对象编程的关键,需要根深蒂固的基本概念.说你知道C#而不是这就像知道如何说英语,并且不知道字母是什么.对不起,直言不讳,但确实如此.

从上面的Wiki链接(这不是我的),这里是多态性的一个例子(转换为C#...)

public class Animal
{
    public virtual String talk() { return "Hi"; }
    public string sing() { return "lalala"; }
}

public class Cat : Animal
{
    public override String talk() { return "Meow!"; }
}

public class Dog : Animal
{
    public override String  talk() { return "Woof!"; }
    public new string sing() { return "woofa woofa woooof"; }
}

public class CSharpExampleTestBecauseYouAskedForIt
{
    public CSharpExampleTestBecauseYouAskedForIt()
    {
        write(new Cat());
        write(new Dog());
    }

    public void write(Animal a) {
        System.Diagnostics.Debug.WriteLine(a.talk());
    }

}
Run Code Online (Sandbox Code Playgroud)


小智 10

让我们以更有趣的方式解释一下.继承是派生类利用基类功能的方式.多态性是基类利用派生类的实现的方式.

public class Triangle :Shape {
 public int getSides() {
  return 3;
 }
}

}
public class Shape {
 public boolean isSharp(){
  return true;
 }
 public virtual int getSides(){
  return 0 ;
 }

 public static void main() {
  Triangle tri = new Triangle();
  System.Console.WriteLine("Triangle is a type of sharp? " + tri.isSharp());  //Inheritance 
  Shape shape = new Triangle();
  System.Console.WriteLine("My shape has " + shape.getSides() + " sides.");   //Polymorphism 
 }
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*ley 7

多态性是覆盖你继承的行为的行为.

如果你不覆盖它,它不是多态,它只是继承.

  • 除非您使用接口。然后,您将通过接口实现多态行为。 (2认同)

PsC*_*aft 6

继承和多态之间没有区别.多态性是继承的一部分,没有它就不可能存在.简而言之,多态性是将对象视为基类对象的能力,但在基类上调用VIRTUAL方法将从子类调用适当的方法.很好的例子在这里:http://www.psworld.pl/Programming/Inheritance


Ric*_*ray 6

从基类派生类时,派生类将继承除构造函数之外的基类的所有成员,但派生类是否能够访问这些成员将取决于基类中这些成员的可访问性.C#通过继承为我们提供了多态性.基于继承的多态允许我们在基类中定义方法,并使用派生类实现覆盖它们.因此,如果您有一个可能持有多个派生类对象之一的基类对象,则在正确使用时,多态性允许您根据对象所属的派生类的类型调用将以不同方式工作的方法.

参考文献:http://www.codeproject.com/Articles/1445/Introduction-to-inheritance-polymorphism-in-C