unity3D-游戏/AR/VR在线就业班 蓝鸥C#入门虚方法学习笔记
虚方法和我们之前学的抽象方法有一些相似,但是也有一些不同。在我们学校虚方法之前,我们对方法替换了解一下:
方法替换
子类继承父类后,可以隐藏父类中的方法,在子类中重新实现
using System;
namespace Lesson_19
{
public class Super{
public void A(){
Console.WriteLine ("这个方法时在Super中定义的");
}
}
public class Sub:Super{
//方法替换——在子类中重新实现父类中定义的方法
//关键词——new
public new void A(){
Console.WriteLine ("这个方法时在Sub中定义的");
}
}
class MainClass
{
public static void Main (string[] args)
{
//使用父类类型引用父类对象,调用父类定义的方法
Super super = new Super ();
super.A ();
//使用子类类型引用子类对象,调用子类定义的方法
Sub sub = new Sub ();
sub.A ();
//使用父类类型引用子类对象
Super c=new Sub();
//调用了父类中定义的方法
c.A ();
}
}
}
虚函数和重写
用virtual修饰的方法叫做虚方法,用override修饰的方法叫做重写
只有方法和属性才能是虚的,字段不能虚
using System;
namespace Lesson_19
{
public class Super{
public virtual string Name{
get{
return "老王";
}
}
public void A(){
Console.WriteLine ("这个方法时在Super中定义的A");
}
//虚方法
public virtual void B(){
Console.WriteLine ("这个方法时在Super中定义的B");
}
}
public class Sub:Super{
public override string Name
{
get{
return "老张";
}
}
//方法替换——在子类中重新实现父类中定义的方法
//关键词——new
public new void A(){
Console.WriteLine ("这个方法时在Sub中定义的A");
}
// public override void B(){
// Console.WriteLine ("这个方法时在Sub中定义的B");
// }
}
class MainClass
{
public static void Main (string[] args)
{
//使用父类类型引用父类对象
Super super = new Super ();
super.A ();//调用父类定义的方法
super.B ();//调用父类定义的方法
Console.WriteLine(super.Name);
//使用子类类型引用子类对象
Sub sub = new Sub ();
sub.A ();//调用子类定义的方法
sub.B ();//调用子类定义的方法
Console.WriteLine(sub.Name);
//使用父类类型引用子类对象
Super c=new Sub();
c.A ();//调用了父类中定义的方法
c.B (); //调用子类定义的方法
Console.WriteLine(c.Name);
//多态——使用父类类型,调用子类中实现发方法
//抽象方法和虚方法的不同——用于实现多态
//1、抽象方法必学在抽象类中
//2、抽象方法在父类中不能实现
//3、抽象方法在非抽象子类中必须实现
}
}
}