C#-多态(十二)
继承概念
多态:即一个接口,多个功能
同一种操作作用于不同的对象,可以有不同的解释,产生不同的执行结果
多态性可以是静态的或动态的。在静态多态性中,函数的响应是在编译时发生的。在动态多态性中,函数的响应是在运行时发生的
静态多态性
在静态多态性中,函数的响应是在编译时发生的
父类中如果有方法需要子类重写,可以将该方法标记为虚方法
虚方法必须在父类中有实现,空实现也可以
虚方法子类可以重写,也可以不重写
实现静态多态性有两种方法;
函数重载
运算符重载
函数重载
即在同一范围中对同一函数名的多重定义
通过定义函数的传参的不同类型或数量进行区分
在调用函数时,根据传的参数类型和数量判断调用名字相同的那个方法
using System; namespace 函数重载
{
class printdata
{
void print(int i)
{
Console.WriteLine("printing int: {0}", i);
} void print(double f)
{
Console.WriteLine("printing folat: {0}", f);
} void print(string s)
{
Console.WriteLine("printing string: {0}", s);
} static void Main(string[] args)
{
printdata p = new printdata(); // 调用 print 来打印整数
p.print(); // 调用 print 来打印浮点数
p.print(234.643); // 调用 print 来打印字符串
p.print("Hello Tynam"); Console.ReadKey(); }
}
}
运行结果
·
运算符重载
重定义或重载C#中内置的运算符
通过关键字operator加运算符的符号来定义
与其他函数一样,重载运算符有返回类型和参数列表
using System; namespace 运算符重载
{
class Complex
{
public int x;
public int y;
public int z;
public Complex(int x, int y, int z)
{
this.x = x;
this.y = y;
this.z = z;
} public static Complex operator+(Complex v1,Complex v2)
{
return new Complex(v1.x + v2.x,v1.y + v2.y,v1.z + v2.z);
} public static Complex operator /(Complex v1, Complex v2)
{
return new Complex(v1.x / v2.x, v1.y / v2.y, v1.z / v2.z);
}
} class Program
{
static void Main(string[] args)
{
Complex v1 = new Complex(,,);
Complex v2 = new Complex(,,);
Complex v3 = v1 + v2;
Complex v4 = v1 / v2;
Console.WriteLine("x is {0} ; y is {1} ; z is {2}", v3.x, v3.y, v3.z);
Console.WriteLine("x is {0} ; y is {1} ; z is {2}", v4.x, v4.y, v4.z);
Console.ReadKey();
}
}
}
运行结果
可重载和不可重载运算符
可以被重载的一元运算符:+、 -、 !、~、++、--
可以被重载的二元运算符:+、 -、 *、 /、 %
可以被重载的比较运算符:==、!=、<、>、<=、>=
不能被直接重载的条件逻辑运算符:&&、||
不能被重载的赋值运算符:+=、-=、*=、/=、 %=
不能被重载的其他运算符:=、 .、 ?:, ->、 new、 is、sizeof、typeof
动态多态性
在动态多态性中,函数的响应是在运行时发生的
使用关键字abstract创建抽象类,用于提供接口的部分类的实现
当一个派生类继承自该抽象类时,实现即完成
抽象类包含抽象方法,抽象方法可被派生类实现
抽象方法不允许有方法体的
当一个子类继承抽象类时,必须把父类的所有抽象成员都重写;若子类也是一个抽象类,可以不写
子类重写父类的方法,参数和返回值必须跟父类一样
抽象方法不能用static修饰
抽象类是有构造函数的,虽然不能被实例化
抽象类标记abstract,不能有任何实现,不能有方法体
using System; namespace 动态多态性
{
abstract class Shape
{
public abstract int area();
} class Rectangle : Shape
{
private int length;
private int width; public Rectangle(int a = , int b = )
{
length = a;
width = b;
} public override int area()
{
return (width * length);
}
} class RectangleTester
{
static void Main(string[] args)
{
Rectangle r = new Rectangle(, );
double a = r.area();
Console.WriteLine("RectangleArea is: {0}",a);
Console.ReadKey();
}
} }
运行结果
C#-多态(十二)的更多相关文章
- Java基础十二--多态是成员的特点
Java基础十二--多态是成员的特点 一.特点 1,成员变量. 编译和运行都参考等号的左边. 覆盖只发生在函数上,和变量没关系. Fu f = new Zi();System.out.println( ...
- JAVA基础知识总结:一到二十二全部总结
>一: 一.软件开发的常识 1.什么是软件? 一系列按照特定顺序组织起来的计算机数据或者指令 常见的软件: 系统软件:Windows\Mac OS \Linux 应用软件:QQ,一系列的播放器( ...
- JVM(十二):方法调用
JVM(十二):方法调用 在 JVM(七):JVM内存结构 中,我们说到了方法执行在何种内存结构上执行:Java 方法活动在虚拟机栈中的栈帧上,栈帧的具体结构在内存结构中已经详细讲解过了,下面就让我们 ...
- 前端开发中SEO的十二条总结
一. 合理使用title, description, keywords二. 合理使用h1 - h6, h1标签的权重很高, 注意使用频率三. 列表代码使用ul, 重要文字使用strong标签四. 图片 ...
- CRL快速开发框架系列教程十二(MongoDB支持)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- 我的MYSQL学习心得(十二) 触发器
我的MYSQL学习心得(十二) 触发器 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数 ...
- Web 前端开发精华文章推荐(jQuery、HTML5、CSS3)【系列十二】
2012年12月12日,[<Web 前端开发人员和设计师必读文章>系列十二]和大家见面了.梦想天空博客关注 前端开发 技术,分享各种增强网站用户体验的 jQuery 插件,展示前沿的 HT ...
- 第十二章Fundamental Data Types 基本数据类型
目录: 12.1 数值概论 12.2整数 12.3浮点数 12.4 字符和字符串 12.5布尔变量 12.6枚举类型 12.7具名常量 12.8数组 12.9创建你自己的类型 12.1 数值概论 ...
- [分享] IT天空的二十二条军规
Una 发表于 2014-9-19 20:25:06 https://www.itsk.com/thread-335975-1-1.html IT天空的二十二条军规 第一条.你不是什么都会,也不是什么 ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
随机推荐
- com.javax.servlet 慢慢看完慢慢学完
1.接口 RequestDispatcher 类说明 定义一个对象,从客户端接收请求,然后将它发给服务器的可用资源 (例如Servlet.CGI.HTML文件.JSP文件).Servlet引擎创 建r ...
- DWR第一篇之入门示例
1. 新建maven-web项目,目录结构如下: 2. 在pom.xml里添加dwr所需的依赖 <dependency> <groupId>org.directwebremot ...
- Ubuntu apt-get和pip国内源更换
Ubuntu apt-get和pip源更换 更新数据源为国内,是为了加速安装包的增加速度. 更换apt-get数据源 输入:sudo -s切换为root超级管理员: 执行命令:vim /etc/apt ...
- MySQL中间件之ProxySQL(10):读写分离方法论
返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html 1.不同类型的读写分离 数据库中间件最基本的功能就是实现读写分离,Pr ...
- python bytes和bytearray、编码和解码
str.bytes和bytearray简介 str是字符数据,bytes和bytearray是字节数据.它们都是序列,可以进行迭代遍历.str和bytes是不可变序列,bytearray是可变序列,可 ...
- python面向对象入门(1):从代码复用开始
本文从代码复用的角度一步一步演示如何从python普通代码进化到面向对象,并通过代码去解释一些面向对象的理论.所以,本文前面的内容都是非面向对象的语法实现方式,只有在最结尾才给出了面向对象的简单语法介 ...
- HttpClient+Jsoup模拟登陆贺州学院教务系统,获取学生个人信息
前言 注:可能学校的教务系统已经做了升级,当前的程序不知道还能不能成功获取信息,加上已经毕业,我的账户已经被注销,试不了,在这里做下思路跟过程的记录. 在我的毕业设计中”基于SSM框架贺州学院校园二手 ...
- lua的table元类
Lua中提供的元表是用于帮助Lua数据变量完成某些非预定义功能的个性化行为,如两个table的相加.假设a和b都是table,通过元表可以定义如何计算表达式a+b.当Lua试图将两个table相加时, ...
- Keras入门(一)搭建深度神经网络(DNN)解决多分类问题
Keras介绍 Keras是一个开源的高层神经网络API,由纯Python编写而成,其后端可以基于Tensorflow.Theano.MXNet以及CNTK.Keras 为支持快速实验而生,能够把 ...
- linux基本命令手册
常用指令 ls 显示文件或目录 -l 列出文件详细信息l(list) -a 列出当前目录下所有文件及目录,包括隐藏的a(all) mkdir ...