java里面有虚方法么

Python010

java里面有虚方法么,第1张

java中没有明确说明什么是虚方法

虚方法是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