虚方法是C++来的
java虚方法你可以理解为java里所有被overriding的方法都是virtual的,所有重写的方法都是override的
class Program
{
static void Main(string[] args)
{
Person p = new Person("test1")
p = Person.Find("Aseven")
int Age = p.GetAge()
p.Say()
Console.ReadKey()
}
}
public class Person
{
private string _name
private int _age
public string Name
{
get { return _name}
set { _name = value}
}
public virtual void Say()
{
Console.WriteLine("******")
}
public static Person Find(string name)
{
return new Chinese(name)//模拟数据库查找
}
public int GetAge()
{
return _age
}
public Person() { }
public Person(string name)
{
this._name = name
}
}
public class Chinese : Person
{
public Chinese(string name)
{
this.Name = name
}
public override void Say()
{
Console.WriteLine("你好!")
}
}
public class American : Person
{
public American(string name)
{
this.Name = name
}
public override void Say()
{
Console.WriteLine("Hello!")
}
}
C#的Virtual Function概念是从C++来的。对像我这样直接学java的人来说,不是个好理解的东西,而且和java的面向对象有冲突。java里没有类似的关键字。java的多态有两个重要概念:overriding(重写)和overloading(重载)。注意,不是关键字。顺便说一下,上面有个匿名的朋友把这两个搞混了,函数名相同、参数类型不同的是overloading,而且和返回类型无关。按我的理解是,你可以认为java里所有被overriding的方法都是virtual的,所有重写的方法都是override的。举个例子。class A { void func() {System.out.println("func in A") }}class B extends A { void func() {System.out.println("func in B") }}有这样两个类,执行下面的代码会发现,和C#里加了virtual、override的效果相同。A a = new A()A b = new B()a.func()// 这里输出func in Ab.func()// 这里输出func in B