C# 什么是多态 virtual abstract override new 区别

什么是多态(Polymorphism)多态核心一句话:**父类引用指向子类对象,调用方法时,执行的是子类重写后的实现。

实现多态两大常见方式:

1. **虚方法 virtual + override(普通基类)** —— 你的 Animal / Dog / Cat 这套

2. **抽象方法 abstract + override(抽象基类)** —— 你的 Person / Man / Woman 这套

两者只是基类形式不一样,**都属于多态**。

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApp13

{

class Program

{

static void Main(string[] args)

{

Dog dog = new Dog();

Cat cat = new Cat();

Animal animal = dog;

animal.Bark();

animal = cat;

animal.Bark();

Man man = new Man();

Woman woman = new Woman();

man.Bark();

woman.Bark();

Person person = man;

person.Bark();

Console.Read();

}

}

public class Animal

{

public virtual void Bark()

{

Console.WriteLine("Animal Barking....\r\n");

}

}

public class Dog : Animal

{

public override void Bark()

{

Console.WriteLine("Dog Barking.... Wang wang\r\n");

}

}

public class Cat : Animal

{

public override void Bark()

{

Console.WriteLine("Cat Barking.... Miao\r\n");

}

}

public abstract class Person

{

public abstract void Bark();

}

public class Man : Person

{

public override void Bark()

{

Console.WriteLine("I'm a man.\r\n");

}

}

public class Woman : Person

{

public override void Bark()

{

Console.WriteLine("I'm a woman\r\n");

}

}

}

这是面向对像的多态吗?

using System;

namespace ConsoleApp13

{

class Program

{

static void Main(string[] args)

{

Console.WriteLine("===== ① virtual + override 【标准多态】 =====");

Animal animal1 = new Dog();

animal1.Bark(); // 执行 Dog 的 Bark(多态)

Console.WriteLine("\n===== ② new 方法隐藏【不是多态!】 =====");

Animal animal2 = new Pig();

animal2.Bark(); // 执行父类 Animal 的 Bark!不会走到Pig方法

Pig pig = new Pig();

pig.Bark(); // 只有用Pig变量调用,才执行Pig自身方法

Console.ReadKey();

}

}

public class Animal

{

public virtual void Bark()

{

Console.WriteLine("Animal Barking....");

}

}

// 方案A:override 重写 → 多态

public class Dog : Animal

{

public override void Bark()

{

Console.WriteLine("Dog:汪汪汪");

}

}

// 方案B:new 隐藏父类方法,不是多态

public class Pig : Animal

{

public new void Bark()

{

Console.WriteLine("Pig:哼哼哼");

}

}

}

写法 是否多态 父类引用指向子类对象调用结果

virtual + override ✅ 是多态 执行子类方法

new 同名方法 ❌ 不是多态 执行父类方法

抽象类abstract + override ✅ 是多态 执行子类方法

文件名精灵2025年最新版 机器翻译 AI智能
...
批量修改文件名称、文件夹名称

免费使用 功能无限制

全面接入机器自动翻译功能,主流AI大模型智能改名

方便快捷,支持正则表达式、无需安装功能齐全、支持定制无广告、无插件,放心使用。

点击下载 点击下载
本站中所有的计算器的计算结果仅供参考,本站对此结果的准确性不承担任何责任,实际数额以银行/保险公司/国家相关机构确认的结果为准。
在线客服QQ:543690914,备案号: 苏ICP备15037649号-27。东海县白塔埠镇佳诚电脑经营部版权所有。