C#基础-面向对象-多态
多态,不同对象对同一方法的不同实现
使用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#基础-面向对象-多态的更多相关文章
- Java基础-面向对象第三大特性之多态(polymorphism)
Java基础-面向对象第三大特性之多态(polymorphism) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 多态是继封装,继承之后,面向对象的第三大特性,多态的 ...
- 【基础】Equal方法、面向对象-多态-继承-封装
package Test; public class L3_1 { public static void main(String[] args) { C c1=new C(100); C c2=new ...
- C#基础-----面向对象
C#基础-----面向对象(一) 分类: C#基础2015-06-08 14:10 2人阅读 评论(0) 收藏 举报 1,面向对象 什么是面向对象?一个分析问题的方式(增强了程序的可扩展性) 几个名词 ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- OC面向对象—多态
OC面向对象—多态 一.基本概念 多态是基于继承的基础之上的,多态可以使得父类的指针指向子类的对象.如果函数或参数中使用的是父类类型,可以传入父类.子类对象,但是父类类型的变量不能直接调用子类特有的方 ...
- 第二十五节:Java语言基础-面向对象基础
面向对象 面向过程的代表主要是C语言,面向对象是相对面向过程而言,Java是面向对象的编程语言,面向过程是通过函数体现,面向过程主要是功能行为. 而对于面向对象而言,将功能封装到对象,所以面向对象是基 ...
- Java基础-面向对象第二特征之继承(Inheritance)
Java基础-面向对象第二特征之继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承的概述 在现实生活中,继承一般指的是子女继承父辈的财产.在程序 ...
- Java基础-面向对象第一特性之封装(Encapsulation)
Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...
- Java编程基础-面向对象(中)
本章承接Java编程基础-面向对象(上)一文. 一.static关键字 在java中,定义了一个static关键字,它用于修饰类的成员,如成员变量.成员方法以及代码块等,被static修饰的成员具备一 ...
随机推荐
- php 设置虚拟目录
php 设置虚拟目录两个步骤,很简单. 第一,打开安装apache目录下的conf下面的httpd.conf文件. 找到IfModule 标记, 再它下面添加红色方框中的内容.注意不能少东西. ...
- asp.net用zip方法批量导出txt
首先: 引用 ICSharpCode.SharpZipLib.dll,百度下载 然后引用命名空间: using ICSharpCode.SharpZipLib.Zip;using ICSharpCod ...
- 浅谈SQL Server中的三种物理连接操作(Nested Loop Join、Merge Join、Hash Join)
简介 在SQL Server中,我们所常见的表与表之间的Inner Join,Outer Join都会被执行引擎根据所选的列,数据上是否有索引,所选数据的选择性转化为Loop Join,Merge J ...
- 各种推导式<"一行能解决的事,为什么要用那么多行">
一.推导式 1.列表:[结果 for循环 条件筛选] 2.字典:{k:v for循环 条件筛选} 3.集合推导式{k for循环 条件筛选} ???为什么没有元组推导式 二.生成器表达式(元组表达式) ...
- P1576 最小花费
题目背景 题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元 ...
- JavaScript基础:比较运算符——==与 ===;!=与!==
var x=10, y="10", m=15 x==y;//返回true x===y;//返回false x!=y;//返回false x!==y;//返回true//同理cons ...
- JavaScript Date对象方法详细总结
Date 对象方法 方法 描述 Date() 返回当日的日期和时间. getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31). getDay() 从 Date 对象返回一周中的某 ...
- PDO数据库类——对query()和exec()的异常监听
PDO异常类中,query()和exec()方法中执行失败时,默认情况下,我们是无法知道,具体执行失败的原因. 那如果我们想要监听异常的话,肿么整呢? 只要使用setAttribute()方法,即可监 ...
- Git-进阶-远程仓库的使用
一.远程仓库怎么玩 1. 自己搭建一个运行Git的服务器 Git是分布式版本控制系统,同一个Git仓库,可以分布到不同的机器上,但肯定有一台机器有着最原始的版本库,然后别的机器来克隆这个原始版本库,这 ...
- MySQL数据库实验四:嵌套查询
实验四 嵌套查询 一.实验目的 掌握SELECT语句的嵌套使用,实现表的复杂查询,进一步理解SELECT语句的高级使用方法. 二.实验环境 三.实验示例 1. 查询与“刘晨”在同一 ...