.net学习笔记--使用抽象方法实现多态

在使用抽象方法实现多态之前,我们必须知道一些知识点:

1.抽象类不能被实例化;

2.抽象类可以包含非抽象成员,它们可以由其子类继承调用。

我们可以先创建一个Person的抽象类,代码如下:

 1 abstract class Person
 2     {
 3
 4         public Person() { }
 5
 6         public Person(string name,int age)
 7         {
 8             Name = name;
 9             Age = age;
10         }
11         string name;12
13         public string Name
14         {
15             get { return name; }
16             set { name = value; }
17         }
18         int age;
19
20         public int Age
21         {
22             get { return age; }
23             set { age = value; }
24         }
25
26         public abstract void Show();
27     }

Person类中我们定义了个抽象方法Show(),注意抽象方法只能在抽象类中,而且其没有方法体。

接下来写两个继承Person类的两个子类,代码如下:

 1 class Student:Person
 2     {
 3         public override void Show()
 4         {
 5             Console.WriteLine("我是student类的Show方法:{0},{1}",Name,Age);
 6         }
 7     }
 8     class Teacher : Person
 9     {
10
11         public override void Show()
12         {
13             Console.WriteLine("我是teacher类的Show方法:{0},{1}", Name,Age);
14         }
15     }

当子类继承抽象类时:1.重写方法必须添加关键字override关键字,否则不认为是重写方法

2.override方法的方法签名必须和父类的方法完全一样

3.override方法必须找到可以被重写的父类方法

4.抽象方法子类必须重写

抽象类跟子类都写完了 ,接着就是实现多态了,多态的使用方式一般有三种:

1.声明父类变量,实例化子类对象
                            2.父类做为参数,传入子类对象
                            3.父类做为方法的返回值,返回具体的子类对象

实现多态代码如下:

 1  static void Main(string[] args)
 2         {
 3             Student stu = new Student() {Name="aa",Age=18 };
 4             Teacher tea = new Teacher() {Name="bb",Age=19};
 5             // 这里并没有创建Person对象。只是使用它做为类型创建一个数组对象
 6             Person[] objs=new Person[2];
 7             objs[0] = stu;
 8             objs[1] = tea;
 9
10             foreach (Person item in objs)
11             {
12                 item.Show();//多态是指不同的子类对象的响应,多态是行为的多态
13             }
14             Console.ReadKey();
15         }

最后还有一点,抽象类也可以继承抽象类,但是我们知道,继承抽象类的子类必须重写抽象类的抽象方法,当抽象类继承抽象类时,继承的抽象方法必须加上个override。代码如下:

1 abstract class Manager:Person
2     {
3         //子类如果不想重写父类的方法,也必须添加override关键字,但是同时可以声明为抽象的方法,不去做真正的重写
4         public abstract override void Show();
5     }

.net学习笔记--使用抽象方法实现多态,布布扣,bubuko.com

时间: 2024-10-02 14:56:58

.net学习笔记--使用抽象方法实现多态的相关文章

Java学习笔记-4.继承与多态

一.继承机制 1.继承:允许一个类作为另一个类的扩充版本 2.单继承:一个类只继承了一个父类    多继承:一个类继承了多个父类 Java只支持单继承,C++支持多继承 二.类的继承 1.形式: class SubClass extends BaseClass { //子类类体,定义子类的新成员 } Java中所有的类都直接或间接地继承类 java.lang.Object 2.构造方法 (1)显式构造方法    形式:super(参数表); 系统执行到这条语句时,会根据参数表判断调用父类中哪个构

Java学习笔记(十)——多态

一.多态 1.对象的多种形态 (1)引用多态: 父类的引用可以指向本类的对象 父类的引用可以指向子类的对象 (2)方法多态: 创建本类对象时,调用的方法为本类方法: 创建子类对象时,调用的方法是子类方法,如果没重写,调用的就是继承父类的方法 (3)父类的引用是不可以调用子类特有的方法. 二.多态中的引用类型转换 1.向上类型转换(隐式/自动类型转换) 小类型到大类型的转换 2.向下类型转换(强制类型转换) 大类型到小类型的转换 3.instanceof运算符,来解决引用对象的类型,避免类型转换的

java学习笔记(八)多态与抽象

多态和抽象是从继承引出来的两个重要的概念,多态允许对象以多种形式存在,而抽象则允许创建抽象类. 多态是指一个对象有多种形式的能力.一个类的子类可以定义它们唯一的行为,同时共享父类的某些相同特征.动态多态指在运行中系统才能动态确定方法所指的对象. 多态的技术基础: 向上转型技术:一个父类的引用变量可以指向不同的子类对象,或者说一个子对象可以被当做一个父类类型; instanceof关键字:用于判断运行时对象的真正类型; 动态绑定技术:运行时根据父类引用变量所指对象的实际类型执行相应的子类方法,从而

C#中面向对象编程机制之多态学习笔记

C#的多态性: 我的理解是:同一个操作,作用于不同的对象时,会有不同的结果,即同一个方法根据需要,作用于不同的对象时,会有不同的实现. C#的多态包括:接口多态,继承多态. 其中继承多态又包括通过虚拟方法实现的多态和通过抽象方法实现的多态性 例如:基类动物都有吃的方法,但是不同的动物吃的东西就会不一样,例如狼吃肉,羊吃草,这样"吃"的这个方法就要在派生类里面重新实现以下,运行时,通过指向基类的指针,来调用实现派生类中的方法. 接下来举例实现多态性. 1. 接口多态性 把动物"

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数、抽象类、虚析构函数、动态创建对象

C++ Primer 学习笔记_34_面向对象编程(5)--虚函数与多态(二):纯虚函数.抽象类.虚析构函数.动态创建对象 一.纯虚函数 1.虚函数是实现多态性的前提 需要在基类中定义共同的接口 接口要定义为虚函数 2.如果基类的接口没办法实现怎么办? 如形状类Shape 解决方法 将这些接口定义为纯虚函数 3.在基类中不能给出有意义的虚函数定义,这时可以把它声明成纯虚函数,把它的定义留给派生类来做 4.定义纯虚函数: class <类名> { virtual <类型> <函

大龙的学习笔记之“虚方法,抽象方法,重写,抽象类,接口”

虚方法:可以重写,也可以不重写,英文名:virtual 抽象方法:必须重写,必须放在抽象类中,英文名:abstract 重写:可以重写三种方法:virtual,abstract,override,英文名:override 抽象类:可以有抽象方法,也可以有非抽象方法,英文名:abstract 接口:和抽象类相似,但是里面只有未实现的方法,英文名:interface 大龙的学习笔记之"虚方法,抽象方法,重写,抽象类,接口",布布扣,bubuko.com

C++ Primer 学习笔记33_面向对象编程(4)--虚函数与多态(一):多态、派生类重定义、虚函数的访问、 . 和-&gt;的区别、虚析构函数、object slicing与虚函数

C++ Primer学习笔记33_面向对象编程(4)--虚函数与多态(一):多态.派生类重定义.虚函数的访问. . 和->的区别.虚析构函数.object slicing与虚函数 一.多态 多态可以简单地概括为"一个接口,多种方法",前面讲过的重载就是一种简单的多态,一个函数名(调用接口)对应着几个不同的函数原型(方法). 更通俗的说,多态行是指同一个操作作用于不同的对象就会产生不同的响应.或者说,多态性是指发出同样的消息被不同类型的对象接收时有可能导致完全不同的行为. 多态行分

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr)、C++对象模型

C++ Primer 学习笔记_35_面向对象编程(6)--虚函数与多态(三):虚函数表指针(vptr)及虚基类表指针(bptr).C++对象模型 一.虚函数表指针(vptr)及虚基类表指针(bptr) C++在布局以及存取时间上主要的额外负担是由virtual引起的,包括: virtual function机制:用以支持一个有效率的"执行期绑定": virtual base class:用以实现多次在继承体系中的基类,有一个单一而被共享的实体. 1.虚函数表指针 C++中,有两种数据

黑马程序员_JAVA 基础加强学习笔记

一.面向对象 (一)继承  1.继承的好处: (1) 提高了代码的复用性. (2) 让类与类之间产生了关系,提供了另一个特征多态的前提. 注意: 子类中所有的构造函数都会默认访问父类中的空参数的构造函数,因为每一个子类构造内第一行都有默认的语句super();  如果父类中没有空参数的构造函数,那么子类的构造函数内,必须通过super语句指定要访问的父类中的构造函数. 如果子类构造函数中用this来指定调用子类自己的构造函数,那么被调用的构造函数也一样会访问父类中的构造函数. 2.final特点