One
не наследуется от Two
, и это то, что не работает замечательно.
Наследование класса не означает скрытие или замену значения свойства одного класса, но это производноекласс - это специализация базового класса, от которого он наследуется.
Например:
public class Cat {
}
public class Dog {
}
Что общего у этих двух?
- У них четыреноги;
- Все они животные;
- У них есть волосы;
Что у них общего?
- Aкошка мяукает;
- собака лает;
Давайте пересмотрим нашу модель, установив ее в следующем порядке.
public class Cat {
public bool HasHair { get { return true; } }
public int Legs { get { return 4; } }
public string Speaks { get { return "Meows"; } }
}
public class Dog {
public bool HasHair { get {return true; } }
public int Legs { get { return 4; } }
public string Speaks { get { return "Barkles"; } }
}
Теперь, чтобы сэкономить время и кодирование,что мы могли сделать?Обобщите, что общего у обоих классов?Хорошо!Но как сделать так!?
public class Animal {
public bool HasHair { get { return true; } }
public int Legs { get { return 4; } }
public virtual string Speaks { get { return "Does a sound"; } }
}
// We can now inherit from Animal to write our Cat and Dog classes.
public class Cat : Animal {
public overrides string Speaks { get { return "Meows"; } }
}
public class Dog : Animal {
public overrides string Speaks { get { return "Barkles"; } }
}
И вы можете сделать:
Dog dog = new Dog();
dog.Legs; // Because Legs is an Animal property, and a Dog inherits from Animal, then Dog has a property called Legs, since it got it from his base class.
Теперь мы можем сделать:
Animal pet = (Animal)(new Cat());
Тем не менее, выможно ввести Cat
к Animal
, потому что равно Animal
!Теперь вы должны учесть, что ваш tytypeasted Cat
будет "издавать звук", а не "мяуканье", так как при наборе типов от Cat
до Animal
вы говорите, что хотите работать с любым Animal
До тех пор, пока он один.Так что и Cat
, и Dog
являются животными.
Мы могли бы продвинуть наш пример еще дальше, сказав, что не у каждого животного есть четыре ноги, у некоторых их нет, а у других только две.Тогда мы должны были бы обобщить и специализировать соответственно.