1、多态就是设计模式!!!多态理解了设计模式就理解了。
2、定义坐标类,坐标类默认继承Object的ToString()方法,没有自己的特色。
3、override ToString()输出友好信息:
public override string ToString()
{
return string.Format("({0},{1})",X,Y);
}
只要用定义了这个方法的变量调用它就可以,不用关心具体的实现类是什么。
4、不管new、隐藏,否则问题更麻烦。重载是面向过程的概念。
5、多态就是调用方法的时候不用关心调用的到底是哪个子类的哪个对象。就像通过委托调用方法不用关心调用的到底是哪个函数一样。
6、不同语言中类型的名字可能不一样,比如C#中的int在VB.net中是Integer,.net中定义了CTS(Common Type System 公共语言系统)也就是String、Boolean、Int32等通用类型,编译器负责把int翻译成Int32。
CLR(Common Language Runtime 公共语言运行时)
6、猫叫、狗叫的面试题:
List<Pet> list = new List<Pet>();
list.Add(new Dog());
list.Add(new Dog());
list.Add(new Cat());
foreach (Pet pet in list)
{
//司令不用管这个宠物具体的类型,因为所有的Pet都是有“叫”方法,调用就会执行各自的叫的方法
//if (pet is dog)
//{
//}
//else if (pet is Cat)
//{
//}
pet.叫();
}
class Program
{
static void Main(string[] args)
{
Cat c1 = new Cat();
Dog d1 = new Dog();
Mouse m1 = new Mouse();
//List<Animal> list = new List<Animal>();
//list.Add(c1);
//list.Add(d1);
//list.Add(m1);
//foreach (Animal a in list)
//{
// a.叫();
//}
Animal a = c1;
a.叫();
//d1.咬(c1);
Console.ReadKey();
}
}
//回答面向对象题的策略:先看有几个类
//猫叫完了,狗叫,猫咬了一口老鼠,老鼠叫,猫如果咬狗狗也叫。
abstract class Animal
{
public abstract void 叫();
public void 咬(Animal an)
{
//不要认为这里an是Animal的对象,这里还是an指向的还是Cat对象
//只是用Animal变量指向Cat对象而已。
an.叫();//体现了多态,
//就像通过委托调用方法不用关心调用的到底是哪个函数一样
//多态就是调用方法的时候不用关心调用的到底是哪个子类的那个对象
}
}
class Cat : Animal
{
public override void 叫()
{
Console.WriteLine("喵");
}
}
class Dog : Animal
{
public override void 叫()
{
Console.WriteLine("汪");
}
}
class Mouse : Animal
{
public override void 叫()
{
Console.WriteLine("唧唧");
}
}