你能给我一个继承和多态性的简单例子吗?这样可以更加清晰易懂。
使用 C# 编程语言会更容易理解,因为我已经学过它了。
P.S: 我们得到的教材和导师都是用阿拉伯语写的。
如果你不完全理解这些概念,那么对你来说它们就很难。希望我的问题不会对你们来说太简单或者太愚蠢了。
你能给我一个继承和多态性的简单例子吗?这样可以更加清晰易懂。
使用 C# 编程语言会更容易理解,因为我已经学过它了。
P.S: 我们得到的教材和导师都是用阿拉伯语写的。
如果你不完全理解这些概念,那么对你来说它们就很难。希望我的问题不会对你们来说太简单或者太愚蠢了。
这就是多态:
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);
}
}
继承意味着如果你创建了一个拥有公共字段TankSize的Car类,那么从它派生出一个SuperCar类,后者将从Car继承字段TankSize。
多态性指的是每次在代码中需要一个Car对象的方法时,你都可以传递一个SuperCar对象,它会像一个Car一样运行。
通过定义所需的虚方法,你将调用基类上的方法,但实际操作的对象将执行其自己版本的虚方法,因此你将调用SuperCar.GetPrice而不是Car.GetPrice。
以上简要介绍,更多信息,请参见其他人正在写作的答案。
让我们使用我最喜欢的动词并找到:
http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29
http://msdn.microsoft.com/en-us/library/ms173152%28v=vs.80%29.aspx
多态性和继承是C#和面向对象编程中不可或缺、需要牢记的基本概念。如果你说你懂C#但不懂这个,就好像知道如何说英语却不知道字母表一样。抱歉直言,但这是事实。
来自上面的维基链接(这不是我的),以下是多态性的一个示例(转换为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());
}
}
让我们用更有趣的方式解释这个问题。 继承是派生类利用基类功能的方法。 多态是基类利用派生类实现的方法。
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
}
}
多态是覆盖所继承的内容。
如果你不覆盖它,那就不是多态,而只是继承。
继承和多态之间没有区别。多态是继承的一部分,没有继承就不能存在多态。简单来说,多态是将对象视为基类对象的能力,但从基类调用虚方法将会调用子类的适当方法。这里有一个很好的例子:http://www.psworld.pl/Programming/Inheritance
这一切都与行为有关。
一个类声明了某种行为(接口或契约):
该类也可以定义该行为(实现),或将整个或部分行为委托给其任何子类:
伪代码如下:
class Animal {
method walk()
method speak()
method jump()
// ... here goes the implementation of the methods
}
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!!"
}
}
function makeAnimalSpeak(Animal animal) {
animal.speak();
}
makeAnimalSpeak(new Elephant()) // output: "hi, I am an elephant"
makeAnimalSpeak(new Horse()) // output: "hi, I am a horse"
这里有其他人提供了更好的例子。
在像C#和Java这样的语言中,你有接口(在C++中不存在)的概念,它只是一个行为的声明。与类不同,接口没有实现行为的义务。它只是一个声明。任何类都可以实现该行为,无论它们继承自什么基类。伪代码如下:
interface FlyingBeing {
method fly()
}
class FlyingPig inherits from Animal implements FlyingBeing {
method fly() {
print "hey, look at me, I am a flying pig!!"
}
}