C#拾遗-接口与抽象类
抽象类中可以有构造函数(无参构造函数和有参构造函数)
无参构造函数在子类实例化时被调用
有参构造函数必须显示调用
抽象类中可以有抽象方法 但是不能有方法体,子类必须实现抽象方法
子类必须重写抽象类中的抽象方法,不能用new
抽象类中可以有虚方法,虚方法必须有方法体
子类继承抽象类,可以重写(override)和覆盖(new)抽象类中的虚方法也可以什么都不做。
但二者(override、new)不能同时做,只能选其一
注:new是隐藏基类方法,override重写了基类的方法,即便转为基类对象调用的也是派生类的重写方法
public abstract class C
{
public string strAbs;
protected C()
{
Console.WriteLine("abstract class C");
} // 子类显示调用才会执行有参构造函数
protected C(string str)
{
strAbs = str;
} public void Method1()
{
Console.WriteLine("abstract class:method");
} //public void Method2();错误的写法 抽象类中的方法必须有方法体
public void Method2()
{
//有方法体,可以没有具体实现
}
//抽象类中可以有抽象方法,但是抽象方法不能有方法体,也就是没有实现部分
public abstract void Mehod3(); // public virtual void Method4();错误的写法:抽象类中的虚方法必须有方法体
public virtual void Method4()
{
Console.WriteLine("abstract class virtual method");
}
} public abstract class E:C
{
/// <summary>
/// 子类实例化时会先走父类无参构造函数
/// </summary>
protected E()
{
Console.WriteLine("abstract class E");
} /// <summary>
/// 子类显示调用才会执行有参构造函数
/// </summary>
/// <param name="str"></param>
protected E(string str)
{
this.strAbs = str;
} //子类继承抽象类,必须重写抽象类中的抽象方法
public override void Mehod3()
{ } //子类继承抽象类,对于抽象类的虚方法,要么用重写(override)要么用new覆盖,二者只能选其一
public override void Method4()
{
Console.WriteLine("E:C override method");
}
//public new void Method4()
//{
// Console.WriteLine("E:C new method");
//}
} public class F:E
{
//显示调用父类有参构造函数
public F(string str):base(str)
{
strAbs = str;
}
}
实例代码
接口中的方法不能有方法体,不能有抽象方法
接口是一组行为规范和规则
子类实现接口,必须实现接口中的所有方法
所以定义接口时,接口中的规则尽量单一,做到一个接口只有"一类"规则
这也说明接口是高度抽象的,高度概括,真正做到求同"除异"的
抽象类的作用
抽象类主要用于代码的复用
接口的用法
接口的使用主要体现了面向对象的多态
C#拾遗-接口与抽象类的更多相关文章
- [Think In Java]基础拾遗1 - 对象初始化、垃圾回收器、继承、组合、代理、接口、抽象类
目录 第一章 对象导论第二章 一切都是对象第三章 操作符第四章 控制执行流程第五章 初始化与清理第六章 访问权限控制第七章 复用类第九章 接口 第一章 对象导论 1. 对象的数据位于何处? 有两种方式 ...
- 从接口、抽象类到工厂模式再到JVM来总结一些问题
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习! 涉及到的知识点总结如下: 为什么使用接口? 接口和抽象类的区别 简单工厂模式总结 Java中new和newInstance的区别 J ...
- (转)深入理解Java的接口和抽象类
原文地址: http://www.cnblogs.com/dolphin0520/p/3811437.html 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP ...
- c++ 接口和抽象类
其实对抽象类与接口的区别一直是搞不太清楚,最近正在学习<设计模式>,期间用到了很多c++多态的知识.这是才恍然发现,是应该整理下这方面的知识了.但在翻阅书本.上网查阅资料之际,发现有篇文章 ...
- android中接口和抽象类的区别
最近发现很多基础有点生疏了,特地写一点博客来巩固一下.今天主要来谈谈接口和抽象类的区别,我们在项目的很多地方都会用到接口或者抽象类,但是它们之间的一些区别和相同点不知道大家有没有注意到,还有就是,什么 ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- c#接口与抽象类的区别
abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类.抽象类与非抽象类在以下方面是不同的: 抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误.虽然一些变量和值在编 ...
- Java接口和抽象类的区别
今天看到项目中,写了一个抽象类,里面有很多方法继承了这类,当调用这个接口时,采用的是这个抽象类去调方法的,当时一想,这个不就是我们说的Java的多态的特征: 继承:存在继承关系的子类和父类 重写:子类 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
随机推荐
- python——连接MySQL数据库
都是照着说明文档来的,主要是为了以后忘记了能快一点想起来. 1. 连接 安装MySQL的时候,自动按照了Python的模块,如果没有的话,也可以在官网下载. 看什么都不如看代码来得快: import ...
- android 获取Datepicker日期
1.使用的Android5.0系统,实现上面效果使用了alertdialog 2.布局文件: layout_dataselect <?xml version="1.0" en ...
- vim 使用
vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...
- T-SQL函数总结
T-SQL函数的类别和描述. 函数类别 作用 聚合函数 执行的操作是将多个值合并为一个值.例如COUNT.SUM.MIN 和 MAX. 配置函数 是一种标量函数,可返回有关配置设置的信息. 转换函数 ...
- IL指令详细
名称 说明 Add 将两个值相加并将结果推送到计算堆栈上. Add.Ovf 将两个整数相加,执行溢出检查,并且将结果推送到计算堆栈上. Add.Ovf.Un 将两个无符号整数值相加,执行溢出检查,并且 ...
- Ubuntu菜鸟入门(二)—— apt认知,且完善语言安装包
一 语言安装包安装 1 原因 虽然安装的中文版,但是由于安装包很小,所以汉化的不够完全,所以要安装后,再下载语言包进行安装 2 方法 二 apt--软件包管理器 1 软件源 (1) 介绍 ...
- 好用的px转rem的插件
一个CSS的px值转rem值的Sublime Text 3自动完成插件. 下载地址: https://github.com/flashlizi/cssrem 安装 下载本项目,比如:git clone ...
- Linux 查杀病毒的常见命令
1. 查看异常连接的网络端口及其对应的相应的进程 netstat -anlp | grep EST 2.看下相关的进程ID对应的可执行文件的位置 ps 2393 可以看到进程的可执行文件在哪? 3.临 ...
- 【转】iOS学习之容易造成循环引用的三种场景
ARC已经出来很久了,自动释放内存的确很方便,但是并非绝对安全绝对不会产生内存泄露.导致iOS对象无法按预期释放的一个无形杀手是——循环引用.循环引用可以简单理解为A引用了B,而B又引用了A,双方都同 ...
- 还是畅通工程[HDU1233]
还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submiss ...