C#编程语言与面向对象——继承
现实生活中的事物都归属于一定的类别,比如,狮子是一种(IS_A)动物,为了在计算机中模拟这种关系,面向对象的语言引入了继承(inherit)特性。
构成继承关系的两个类中,Animal称为父类(parent class)或基类(base class),Lion称为子类(child class)。
父类与子类之间拥有以下两个基本特性:
1.是一种(IS_A)关系:子类是父类的一种特例。
2.扩充(Extends)关系:子类拥有父类所没有的功能。
class Animal
{ }
class Lion : Animal
{ }
可以看到,C#中用一个冒号间隔开父类和子类。
类成员的访问权限
面向对象编程的一大特性就是可以控制类成员的可访问性。当前主流的面向对象语言都拥有以下三种基本的可访问性
继承条件下的类成员访问权限
1.所有不必让外人知道的东西都是私有的。
2.所有需要向外提供服务都是公有的。
3.所有的“祖传秘方”,“秘不外传”的都是保护的。
internal
关键字internal所确定的“内部”访问性。
internal有点像public,外界类也可以直接访问声明为internal的类或类的成员。但这只局限于同一个程序集中。
internal是C#默认可访问性,就是说,如果某个类没有任何可访问性关键字在它前面的则是internal。
方法重载、隐藏域虚方法调用
子类方法与父类方法之间的关系可以概括以下三种:
1.扩充(Extend):子类方法,父类没有;
2.重载(Overload):子类有父类的同名函数,但参数类型或数目不一样;
3.完全相同:子类方法与父类方法从方法名称到参数类型完全一样。
在子类与父类中方法完全相同的情况下,调用哪个方法有对象变量的类型决定。
重写(override)与虚方法调用
class Animal
{
public virtual void OverrideF()
{
System.Console.WriteLine("Animal OverideF");
}
}
class Lion : Animal
{
public override void OverrideF()
{
System.Console.WriteLine("Lion OverideF");
}
}
static void Main(string[] args)
{
Lion lion = new Lion();
Animal animal;
animal = lion;
animal.OverrideF();
Console.ReadKey();
}
结果为:
Lion OverideF
在animal引用不同对象是,其运用的结果可能完全不一样,因此我们在编程时只针对父类变量提供的对外接口编程,就使我们的代码成了“变色龙”,传给它不同的子类对象,就干不同的事。
这就是面向对象的“虚方法调用(Virtual Method Invoke)”特性。
面向对象语言拥有的“虚方法调用”特性,使我们可以只用同样的一个语句,在运行时根据对象类型而执行不同的操作
C#编程语言与面向对象——继承的更多相关文章
- Python之面向对象继承和派生
Python之面向对象继承和派生 什么是继承: 继承是一种创建新的类的方法.在Python中,新建的类可以继承自一个或多个父类.原始类称为基类或超类. 新建的类称为派生类或子类. Python中类的继 ...
- OC面向对象—继承
OC面向对象—继承 一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). ...
- 面向对象继承实例(a如何继承b)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- js面向对象继承
前言 最近看到js面向对象这章节了,主要学习了原型和面向对象继承关系,为了梳理自己的知识逻辑,特此记录. js的面向对象 先说说我目前了解的js创建对象方法 1.写一个函数,然后通过new创建对象 2 ...
- Php面向对象 – 继承和重写
Php面向对象 – 继承和重写 承受: php于,通过类.使用特殊的经营宗旨. 通过定义类,采用extends来表示当前的类对象继承该类的对象. 样例: class C { public $p_c ...
- Java面向对象 继承(下)
Java面向对象 继承(下) 知识概要: (1)抽象类 1.1 抽象类概述 1.2 抽象类的特点 ...
- Java面向对象 继承(上)
Java面向对象 继承 知识概要: (1)继承的概述 (2)继承的特点 (3)super关键字 (4)函数覆盖 (5) 子类的实例化过程 (6) final关键字 (1)继承 ...
- js高级-面向对象继承
一.工厂模式创建对象及优缺点 继承就是把公共的部分抽象出来作为父类,基类.吃饭,跑步等 var a = {}; //批量创建不方便,不能重复设置公共属性的代码 //工厂模式出现了,创建10个Cat对象 ...
- 面向对象 继承 抽象类 接口 static 权限修饰符
Day01 面向对象 继承 抽象类 接口 static 1.匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量. 2.类的继承是指在一个现有类的基础上去构建一个新的类,构建出 ...
随机推荐
- jsp页面往mysql里插入中文后数据库里显示乱码
1.JSP页面乱码 这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,<%@ page contentType="text ...
- code of C/C++(3) - 从 《Accelerated C++》源码学习句柄类
0 C++中多态的概念 多态是指通过基类的指针或者引用,利用虚函数机制,在运行时确定对象的类型,并且确定程序的编程策略,这是OOP思想的核心之一.多态使得一个对象具有多个对象的属性.class Co ...
- gitt
一,git config core.autocrlf false 二,vi .git/config[remote "origin"] url = https://github.co ...
- 一个简单的金额平均分配函数(C#版)
//总金额平均分配给总人数 //参数说明:总金额,总人数,最大金额为平均金额的倍率 public double[] GetList(double zje,int zrs,int max) { doub ...
- 鼠标滚动div固定浮动-加锚点
页面: <div class="pa"> <div class="w-95-sl bdl-2"><a>标 ...
- Pressure-sensitive pores scattered
Some researchers take issue with this however - a shark's vision is too good and its sense of smell ...
- 程序内部让用户直接上appstore评价游戏的链接地址以及跳转方法
NSString *str = [NSString stringWithFormat:@"itms-apps://ax.itunes.apple.com/WebObjects/MZStore ...
- a链接的四种状态
四种状态:hover.link.active.visible a:link{color:#fff;} a链接初始化 a:hover{color:yellow;} 把鼠标放上去的状况 a:active{ ...
- MVC 实体字段自定义验证
[Remote("ActionName", "ControllerName", AdditionalFields = "ID", Error ...
- ldap + kerberos + google authentication 实现两步验证
第一步:ldap + kerberos 整合 ,参考之前的文章 第二步:google authentication 安装配置,参考之前的文章 第三步:整合 ldap + kerberos + goo ...