Подтвердить что ты не робот

Какая разница между наследованием и полиморфизмом?

Можете ли вы дать мне простой пример наследования и полиморфизма, чтобы он мог быть полностью ясным и понятным?

используя С#, станет более понятным, поскольку я уже узнал об этом.

P.S: репетиторы, книги у нас есть на родном языке (арабский)

Извините, если этот вопрос казался таким легким, даже глупым для вас, ребята, но эти понятия считаются сложными; если вы не полностью их понимаете, значит, вы терпите неудачу.

4b9b3361

Ответ 1

Позвольте использовать мой любимый глагол, и мы находим:

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

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

Полиморфизм и наследование являются ключевыми, необходимыми для понимания и фундаментальными концепциями для С# и объектно-ориентированного программирования. говоря, что вы знаете С#, а не это как знать, как говорить по-английски, и не имеют понятия о том, что такое алфавит. Извините за тупое, но это правда.

Из ссылки Wiki выше (это не мое), вот пример Полиморфизма (преобразованный в С#...)

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());
    }

}

Ответ 2

Это полиморфизм:

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);
  }
}

это Наследование:

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);
        }
    }

Ответ 3

Наследование означает, что если вы создадите класс Car с открытым полем TankSize, то вы получите из него класс SuperCar, последний унаследовал поле TankSize от Car.

Полиморфизм - это тот факт, что каждый раз в коде у вас есть метод, где ожидается автомобиль, вы можете передать SuperCar и он будет вести себя как автомобиль.

С помощью виртуальных методов, определенных по мере необходимости, вы будете вызывать метод в базовом классе, но фактический объект, над которым вы работаете, выполнит свою версию виртуального метода, чтобы вы вызывали SuperCar.GetPrice, а не Car.GetPrice на самом деле.

Это в нескольких словах, для большего, я вижу, что другие уже отвечают, когда я пишу.

Ответ 4

Объясним это более интересным образом. Наследование - это способ, которым производный класс использует функциональность базового класса. Полиморфизм - это способ использования базового класса для реализации производного класса.

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 
 }
}

Ответ 5

Нет никакой разницы между наследованием и полиморфизмом. Полиморфизм - ЧАСТЬ НАНА, и он не может существовать без него. В коротких словах полиморфизм - это способность рассматривать объект как объект базового класса, но вызов метода VIRTUAL в базовом классе вызовет подходящий метод из дочернего класса. Хороший пример: http://www.psworld.pl/Programming/Inheritance

Ответ 6

Когда вы получаете класс из базового класса, производный класс наследует всех членов базового класса, кроме конструкторов, хотя может ли производный класс иметь доступ к этим членам, будет зависеть от доступности этих членов в базе класс. С# дает нам полиморфизм через наследование. Полиморфизм на основе наследования позволяет нам определять методы в базовом классе и переопределять их с помощью реализации производных классов. Таким образом, если у вас есть объект базового класса, который может содержать один из нескольких объектов производного класса, полиморфизм при правильном использовании позволяет вам вызвать метод, который будет работать по-разному в зависимости от типа производного класса, к которому принадлежит объект.

Ссылка: http://www.codeproject.com/Articles/1445/Introduction-to-inheritance-polymorphism-in-C

Ответ 7

Полиморфизм - это акт переопределения того, что вы наследуете.

Если вы не переопределяете его, это не полиморфизм, это просто наследование.

Ответ 8

Все о поведении.

Класс объявляет определенное поведение (интерфейс или контракт):

Этот класс может также определять это поведение (реализацию) или делегировать либо его целое, либо часть его любому из своих подклассов:

В псевдокоде:

class Animal {
    method walk()
    method speak()
    method jump()
    // ... here goes the implementation of the methods
}

С помощью подкласса вы создаете класс наследовать поведение другого класса.

Когда реализация метода делегируется подклассам, метод называется abstract в базовом классе, а в таких языках, как Java, весь базовый класс также становится абстрактным:

abstract class Animal {
    method walk() {
       doWalk()
    }
    method speak() {
       print "hi, I am an animal!"
    }
    abstract method jump() // delegated to specific animals
}

class Horse inherits from Animal {
    override method walk() {
        doWalkLikeAHorse()
    }
    override method speak() {
        print "hi, I am a horse!"
    }
    override method jump() { 
        doJumpLikeAHorse()
    }
}

class Elephant inherits from Animal {
    override method walk() {
        doWalkLikeAnElephant()
    }
    override method speak() {
        print "hi, I am an elephant!"
    }
    override method jump() { 
        throw error "Sorry, I can't jump!!"
    } 
}

Поведение класса по умолчанию virtual, что означает, что любые классы могут быть переопределены любыми подклассами. Так оно работает в таких языках, как С# и Java, но не обязательно в С++, например.

По сути, поведение базового класса является только виртуальным и может принимать "несколько" (poly) "разных форм" ( морфы), когда подклассы переопределяют этот виртуальный поведение. Вот почему он назвал полиморфизм. В псевдокоде:

function makeAnimalSpeak(Animal animal) {
    animal.speak();
}

makeAnimalSpeak(new Elephant()) // output: "hi, I am an elephant"
makeAnimalSpeak(new Horse())  // output: "hi, I am a horse"

Другие люди предложили вам лучшие примеры здесь.

В таких языках, как С# и Java, у вас есть идея интерфейса (чего не существует в С++), что является просто объявлением поведения. Интерфейс, в отличие от класса, не обязан выполнять поведение. Это просто декларация. Любой класс может реализовать это поведение, независимо от того, какой базовый класс они наследуют. В псевдокоде:

interface FlyingBeing {
    method fly()
}

class FlyingPig inherits from Animal implements FlyingBeing {
    method fly() {
       print "hey, look at me, I am a flying pig!!"
    }
}