多态,不同对象对同一方法的不同实现

使用abstract关键字表示抽象类

 // 表示是一个抽象类
public abstract class Animal
{
private string name;
private double weight;
}

抽象类

// 表示是一个抽象类
public abstract class Animal
{
private string name;
private double weight; public string Name { get => name; set => name = value; }
public double Weight { get => weight; set => weight = value; } public Animal() { }
public Animal(string _name,double _weight)
{
this.Name = _name;
this.Weight = _weight;
}
}

抽象类不能被实例化

public class Dog:Animal
{
}

Dog类继承抽象类Animal后可以实例化

static void Main(string[] args)
{ Dog d = new Dog();
d.Name = "Dog";
d.Weight = 10;
}

抽象类中的抽象方法

1.方法就没有主体,只有定义

2.子类在继承抽象类时,必须实现抽象类中的抽象方法

3.使用override进行重写

Animal中ShowInfo是抽象方法

// 表示是一个抽象类
public abstract class Animal
{
// 省略··· public void Show()
{
Console.WriteLine("名字:{0},体重:{1}",this.Name,this.Weight);
}
// 如果一个方法声明为abstract抽象方法,方法就没有主体,只有定义
// 继承这个抽象类的所有子类都要实现这个方法
public abstract void ShowInfo();
}

Dog中使用override重写

public class Dog:Animal
{
// 子类在继承抽象类时,必须实现抽象类中的抽象方法
// 使用override进行重写
public override void ShowInfo()
{
Console.WriteLine("这是子类重写父类的抽象方法");
}
}

实现效果如下:

static void Main(string[] args)
{
Dog d = new Dog();
d.Name = "Dog";
d.Weight = 10;
d.Show();
d.ShowInfo();
}

多态定义:不同对象对同一方法做出不同的实现

Animal是一个抽象类

// 表示是一个抽象类
public abstract class Animal
{
// 省略···
// 抽象类的抽象方法ShowInfo()
public abstract void ShowInfo();
}

Dog中使用override重写继承Animal

public class Dog:Animal
{
public override void ShowInfo()
{
Console.WriteLine("这是Dog重写Animal的抽象方法");
}
}

新建Pig类继承Animal

public class Pig:Animal
{
public override void ShowInfo()
{
Console.WriteLine("Pig对Animal的抽象方法实现");
}
}

抽象类中父类可以通过子类实现

实现效果如下:

static void Main(string[] args)
{
// 多态定义:不同对象对同一方法做出不同的实现
// 抽象类不能直接被实例化
// 抽象类的父类指向子类,具体实现可以由子类实现
Animal d = new Dog(); // 父类指向Dog类
d.ShowInfo();
d = new Pig(); // 父类指向Pig类
d.ShowInfo();
}

效果如下:

接口

应用:为了实现跨行转账业务,定义了一个接口,该接口包含了一个用于存取款的方法和一个返回余额的属性

接口只能对方法定义

抽象类和接口的区别:抽象类有字段和属性,接口没有

抽象类只能单一继承,接口可以多个继承

IBank接口

using System;
using System.Collections.Generic;
using System.Text; namespace ConsoleApp6
{
// 接口只是对于方法定义
// 抽象类和接口的区别:抽象类有字段和属性,接口没有
// 抽象类只能单一继承,接口可以多个继承
interface IBank
{ // 定义了一个接口,只有接口定义,没有方法实现
// 它是特殊的抽象方法,没有abstract关键字
// 子接口实现也不需要像抽象方法一样用override
void Zhuan(double dzhuan);
}
}

IUser接口

namespace ConsoleApp6
{
interface IUser
{
}
}

对接口的继承使用

// 银行卡
// 可以继承多个接口
class UserCard:IBank,IUser
{
public void Zhuan(double dZhuan)
{
// 继承了接口函数
}
}

C#基础-面向对象-多态的更多相关文章

  1. Java基础-面向对象第三大特性之多态(polymorphism )

    Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...

  2. 【基础】Equal方法、面向对象-多态-继承-封装

    package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...

  3. C#基础-----面向对象

    C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...

  4. python基础——面向对象编程

    python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...

  5. OC面向对象—多态

    OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...

  6. 第二十五节:Java语言基础-面向对象基础

    面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...

  7. Java基础-面向对象第二特征之继承(Inheritance)

    Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...

  8. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  9. Java编程基础-面向对象(中)

    本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...

随机推荐

  1. pat1090. Highest Price in Supply Chain (25)

    1090. Highest Price in Supply Chain (25) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 C ...

  2. FormCollection的用法

    FormCollection的用法: 有时候前台抛来的字段太多,在后台一个一个例举出来显得麻烦,而且还容易出错,FormCollection解决了这个烦恼 #region 给商家留言 [HttpPos ...

  3. synchronized + volatile + ThreadLocal

    线程的共享 synchronized  +  volatile + ThreadLocal <1> synchronized 锁住的是对象,当用它来锁住一个类时,实际上也是锁的一个对象. ...

  4. maven课程 项目管理利器-maven 3-1 maven常用的构建命令

    mvn -v 查看mvn版本 mvn compile  编译 mvn test 测试 mvn package 编译,打包(这个命令会在你的项目路径下一个target目录,并且拥有compile命令的功 ...

  5. SSM环境下配置log4j输出sql和异常到控制台和本地日志文件中

    1.引入日志依赖包 <!--解决Spring使用slf4j输出日志与log4j冲突的问题--> <dependency> <groupId>org.slf4j< ...

  6. springmvc实现文件下载到Android手机设备pda端

    1:首先要添加相关得jar文件,在pom.xml中 <dependency> <groupId>commons-fileupload</groupId> <a ...

  7. 支付宝快速集成ios

    看一下这篇文章,非常不错,并在此感谢这篇文章的作者. 惯例,先写出嵌入支付宝的核心代码 - (IBAction)payWithAli:(UIButton *)sender { //生成订单信息NSSt ...

  8. 如何使用Win32API绘制树

    一.这个已经有几年时间了,刚开始学习charlie的<windows程序设计>的时候做的.现在看来,代码很乱,虽然后来还整理过几次,现在这方面没什么兴趣了,有兴趣的可自由下载. 二.绘制二 ...

  9. IOS 控制当前控制器支持哪些方向

    #pragma mark - 实现这个方法来控制屏幕方向 /** * 控制当前控制器支持哪些方向 * 返回值是UIInterfaceOrientationMask* */ - (NSUInteger) ...

  10. java中string类型转换成map

    背景:有时候string类型的数据取出来是个很标准的key.value形式,通过Gson的可以直接转成map 使用方式: Gson gson = new Gson(); Map<String, ...