黑马程序员——C#面向对象之多态
2013-05-01 22:31
246 查看
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
-->C#面向过程三大特点就是封装、继承、多态。多态看似非常变态,实际上学习了多态之后才发现恍然大悟啊。
-->里氏转换指的是子类可以无条件赋值给子类,如果父类指向的是子类,父类可以强制转换成子类。
-->多态就是一种表现形式,多种执行结果。
---先看一个例子:
class Person
{
public void Show()
{Console.WriteLine("一个人类");}
}
class Man:Person
{
public void Show()
{Console.WriteLine("男性");}
}
//普通访问。
Person p=new Person();
p.Show();//显示“一个人类”。
Man m=new Man();
m.Show();//显示“男性”。
//里氏转换。
Man m1=new Man();
Person p1=m1;
p1.Show();//显示“一个人类”。父类方法只是隐藏,并没有消失。
Man m2=(Man)p1;
m2.Show();//显示“男性”
//使用关键字new叫做显示隐藏父类方法的,说明父类也有此方法。如果不使用关键字new叫做隐式隐藏父类方法。
//如果子类中想要把继承自父类的方法重写,让父类的方法消失,就需要在父类的方法前加virtual,在子类的方法前加override。
class Person
{
public virtual void Show()
{Console.WriteLine("一个人类");}
}
class Man:Person
{
public override void Show()
{Console.WriteLine("男性");}
}
//普通访问。
Person p=new Person();
p.Show();//显示“一个人类”。
Man m=new Man();
m.Show();//显示“男性”。
//里氏转换。
Man m1=new Man();
Person p1=m1;
p1.Show();//显示“男性”。父类的方法被子类的方法重写了,
Man m2=(Man)p1;
m2.Show();//显示“男性”
--->记住口诀:new则隐藏,隐藏看类型;override则(virtual)重写,重写只看新。隐藏父类的方法时,父类的方法前是否在virtual无所谓,但重写父类的方法,父类的方法前必须加virtual,子类的方法前必须加override。
-->当父类的方法被子类的方法重写时,那么父类的方法就不需要实现了,就可以用抽象方法。
-->抽象方法就是没有方法体的方法,通俗点说就是没有大括号那段代码,小括号后面加分号结束,但是抽象方法必须在抽象类中。
abstract class Person
{
public abstract void Show();
}
-->上面就是一个抽象类中,含有一个抽象方法。
-->注意:抽象类与抽象方法有abstract修饰,与public和internal修饰不冲突。
------------抽象方法没有方法体,以();结束,没有{ }代码段。
------------抽象方法以及抽象成员只能存在于抽象类中。
------------抽象类中可以有非抽象成员。
------------抽象方法的子类必须是实现方法体,或者子类的子类实现方法体,只要最终实现方法体即可。
//通过抽象方法实现多态。
abstract class Person
{
public abstract void Show()
}
class Man:Person
{
public override void Show()
{Console.WriteLine("男性");}
}
-->多态是使用一种调用形式,实现不同的方法,从而达到不通过的功能。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
-->C#面向过程三大特点就是封装、继承、多态。多态看似非常变态,实际上学习了多态之后才发现恍然大悟啊。
-->里氏转换指的是子类可以无条件赋值给子类,如果父类指向的是子类,父类可以强制转换成子类。
-->多态就是一种表现形式,多种执行结果。
---先看一个例子:
class Person
{
public void Show()
{Console.WriteLine("一个人类");}
}
class Man:Person
{
public void Show()
{Console.WriteLine("男性");}
}
//普通访问。
Person p=new Person();
p.Show();//显示“一个人类”。
Man m=new Man();
m.Show();//显示“男性”。
//里氏转换。
Man m1=new Man();
Person p1=m1;
p1.Show();//显示“一个人类”。父类方法只是隐藏,并没有消失。
Man m2=(Man)p1;
m2.Show();//显示“男性”
//使用关键字new叫做显示隐藏父类方法的,说明父类也有此方法。如果不使用关键字new叫做隐式隐藏父类方法。
//如果子类中想要把继承自父类的方法重写,让父类的方法消失,就需要在父类的方法前加virtual,在子类的方法前加override。
class Person
{
public virtual void Show()
{Console.WriteLine("一个人类");}
}
class Man:Person
{
public override void Show()
{Console.WriteLine("男性");}
}
//普通访问。
Person p=new Person();
p.Show();//显示“一个人类”。
Man m=new Man();
m.Show();//显示“男性”。
//里氏转换。
Man m1=new Man();
Person p1=m1;
p1.Show();//显示“男性”。父类的方法被子类的方法重写了,
Man m2=(Man)p1;
m2.Show();//显示“男性”
--->记住口诀:new则隐藏,隐藏看类型;override则(virtual)重写,重写只看新。隐藏父类的方法时,父类的方法前是否在virtual无所谓,但重写父类的方法,父类的方法前必须加virtual,子类的方法前必须加override。
-->当父类的方法被子类的方法重写时,那么父类的方法就不需要实现了,就可以用抽象方法。
-->抽象方法就是没有方法体的方法,通俗点说就是没有大括号那段代码,小括号后面加分号结束,但是抽象方法必须在抽象类中。
abstract class Person
{
public abstract void Show();
}
-->上面就是一个抽象类中,含有一个抽象方法。
-->注意:抽象类与抽象方法有abstract修饰,与public和internal修饰不冲突。
------------抽象方法没有方法体,以();结束,没有{ }代码段。
------------抽象方法以及抽象成员只能存在于抽象类中。
------------抽象类中可以有非抽象成员。
------------抽象方法的子类必须是实现方法体,或者子类的子类实现方法体,只要最终实现方法体即可。
//通过抽象方法实现多态。
abstract class Person
{
public abstract void Show()
}
class Man:Person
{
public override void Show()
{Console.WriteLine("男性");}
}
-->多态是使用一种调用形式,实现不同的方法,从而达到不通过的功能。
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
相关文章推荐
- 黑马程序员-C#面向对象之多态
- 黑马程序员<java基础<面向对象(封装,继承,多态,抽象)>>
- 黑马程序员 JAVA基础<二> 面向对象之封装 继承 多态
- 黑马程序员---java基础之面向对象(一)三大特征(封装,继承,多态)
- 黑马程序员------毕老师视频笔记第八天------面向对象(多态)
- 黑马程序员面向对象-----多态
- .Net学习 第2季07 C#面向对象 多态
- 黑马程序员—面向对象(static,封装,继承,多态,内部类,抽象类,接口)总结
- 黑马程序员--C#中面向对象与面向过程
- 黑马程序员-------面向对象的封装、继承、多态一些学习笔记
- 黑马程序员-C#面向对象之继承
- 黑马程序员_<<面向对象(多态)---03>>
- 黑马程序员_学习笔记:5) 面向对象3:多态、Object、内部类、匿名内部类
- 黑马程序员-Java学习笔记之面向对象(多态 在上一篇笔记中)
- 黑马程序员——Java 面向对象_多态
- 关于C#面向对象三个特征:继承,封装,多态的说明
- 黑马程序员——面向对象(下)— 重写、多态、抽象、接口
- 黑马程序员——OC笔记之面向对象三大特征(封装、继承、多态)
- C#面向对象(三)接口实现多态
- 黑马程序员java学习笔记——面向对象的特征封装、继承和多态