抽象类,有3个特点:

第1个,不能被实例化。

第2个,类中的抽象方法在继承的子类中必须重写。

第3个,类一旦有抽象方法出现,那这个类必须定义为抽象类。

现实开发中,发现有共同的代码,可以把这些共同的代码放在一个抽象类中。举个例子,计算四边形的周长。

矩形,长方形,正方形:

 class Rectangle
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} public Rectangle()
{ } public Rectangle(double a, double b)
{
this._A = a;
this._B = b;
} public double Perimeter()
{
return * (_A + _B);
}
}

Source Code

长斜方形,长菱形:

 class Rhomboid
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} public Rhomboid()
{ } public Rhomboid(double a,double b)
{
this._A = a;
this._B = b;
}
public double Perimeter()
{
return * (_A + _B);
}
}

Source Code

梯形,不等边四边形:

 class Trapezoid
{
private double _A;
public double A
{
get { return _A; }
set { _A = value; }
} private double _B;
public double B
{
get { return _B; }
set { _B = value; }
} private double _C;
public double C
{
get { return _C; }
set { _C = value; }
} private double _D;
public double D
{
get { return _D; }
set { _D = value; }
} public Trapezoid()
{ } public Trapezoid(double a,double b,double c,double d)
{
this._A = a;
this._B = b;
this._C = c;
this._D = d;
} public double Perimeter()
{
return _A + _B + _C + _D;
}
}

Source Code

从上面三个类别中,你均可以看到有一个方法,Perimeter()是计算四边形的周长。
经根博文开头所言,你可以把这个方法抽出来,放在一个抽象类中,统一接口:

public abstract class Quadrilateral
{
//周长
public abstract double Perimeter();
}

Source Code

把方法写成抽象方法之后,每个类需要继承此抽象类,并需要重写 override抽象的方法。

下面验证一下代码,如需要计算一个不规则的四边形的周长,那就是4条边相加:

在控制台运行:

C#的抽象类别的更多相关文章

  1. Verilog HDL模型的不同抽象级别

    所谓不同的抽象类别,实际上是指同一个物理电路,可以在不同层次上用Verilog语言来描述.如果只从行为功能的角度来描述某一电路模块,就称作行为模块.如果从电路结构的角度来描述该电路模块,就称作结构模块 ...

  2. php设计模式总结-工厂模式

    使用工厂模式的目的或目标? 工厂模式的最大优点在于创建对象上面,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象.减少代码进行复制粘帖,耦合关系重,牵一发动其他部分代码. 通俗的说,以前创建 ...

  3. c# abstract抽象类与继承类子类的构造函数_base

    http://blog.itpub.net/9240380/viewspace-718054/ http://blog.163.com/cloud_thegreat/blog/static/10367 ...

  4. JSF标签大全详解

    1. JSF入门 藉由以下的几个主题,可以大致了解JSF的轮廓与特性,我们来看看网页设计人员与应用程序设计人员各负责什么. 1.1简介JSF Web应用程序的开发与传统的单机程序开发在本质上存在着太多 ...

  5. Windows Phone – 裁剪图片 (Crop Image)

    原文:Windows Phone – 裁剪图片 (Crop Image) 最近在处理图像的功能,对於图像的比例我也不是非常的清楚,因此,在编辑图片上花了不少时间. 该篇文章主要说明的是:如何对图片选择 ...

  6. java面向对象--抽象类和接口

    如果某个父类只知道其子类应该包含哪些方法,但无法知道如何实现这些方法,同时要使用多态的特性,怎么办? 抽象方法:关键字abstract允许在一个类中创建一个或多个没有方法体的方法--只提供方法签名,但 ...

  7. 关于Java中面向对象章节、IO 流中的重点基础知识。

    一.面向对象的三大特征,以及作用. 答:面向对象的三大特征即,封装性.继承性.多态性. 其分别的作用为 : 封装作用:将数据封装起来,提高数据的安全性, 继承作用:提高代码的复用性,减少冗余代码. 多 ...

  8. Java几种常见的设计模式

    --------------------- 本文来自 旭日Follow_24 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/xuri24/article/detail ...

  9. 【Java基础】浅谈常见设计模式

    Num1:单例模式 基本概念:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 常见写法: 懒汉式 public class Singleton { /* 持有私有静态实例,防止被引用,此处赋值 ...

随机推荐

  1. docker-使用Dockerfile制作镜像

    最近项目中有使用docker,组内做了关于docker的培训,然后自己跟着研究了一下,大概了解如何使用.我是基于tomcat镜像制作(不需要安装jdk,配置环境变量),基于centos镜像制作需要安装 ...

  2. Windows中几个内存相当的指标

    以下几个内存大小相当: IS:虚拟内存任务管理器:提交内存进程对象上的:PrivateMemorySize64,性能计数器:Process\Private Bytes

  3. Clumsy 利用无线网卡结合Clumsy软件模拟弱网络测试

    利用无线网卡结合Clumsy软件模拟弱网络测试 by:授客 QQ:1033553122 实践环境 Clumsy 0.2 下载地址:http://jagt.github.io/clumsy/downlo ...

  4. JavaScript按IP地址排序

    JavaScript按IP地址列表排序,主要思路就是分割每个点号部分,然后ip1和ip2分别对不够三位数的进行补0操作,然后转换为数字类型进行一一比较. 上代码: 正序: var arr=[ {ip: ...

  5. openCV 色彩空间

    ---恢复内容开始--- 1.使用cv2.inrange()获取某个范围内的图像取值,指定某个通道的最小值和最大值 import numpy as np def color_space(image): ...

  6. 安卓界面之Viewpager和Tablayout实现滑动界面

    摘要:六部实现选项卡界面 一. 在gradle文件添加以下代码: implementation 'com.android.support:design:28.0.0' 在gradle文件添加以上代码后 ...

  7. 结对项目-四则运算"软件"之升级版

    本次作业要求来自:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2213 github地址为:https://github.com/L ...

  8. 从零自学Java-8.创建第一个对象

    1.创建对象:2.使用属性描述对象:3.确定对象的行为:4.合并对象:5.从其他对象继承:6.转换对象和其他类型的信息. 程序NewRoot2:计算输入数的算数平方根并输出 package com.j ...

  9. pyhthon常用模块hashlib

    python hashlib模块 一,hashlib模块主要用于加密,其中提供sha1,sha224,sha256,sha384,sha512,md5算法.常用的使用md5即可完成需求. 一,使用md ...

  10. CENTOS7 SYSTEMD SERVICE 将自己的程序放入自动启动的系统服务

    1. 进入文件夹cd /usr/lib/systemd/system 2. 创建文件somed.service 3. 输入内容.如果是监控类程序,需要输入Type=forking[Unit]Descr ...