7、继承详解

继承 = 遗传

继承是面向对象最基本的特征,如果一个语言没有继承机制,就谈不上真正的面向对象的语言。

继承本身很好理解,和我们日常生活中的“继承”概念基本一样:子承父业!所以,你可以看到面向对象的编程语言里面,有了“父类”、“子类”的概念。

但是我个人认为“继承”这个说法并不确切,一般我们理解“继承”,都是理解为继承产业、继承财产,例如李泽钜继承李嘉诚的事业。但在面向对象的领域里面,并不是“子类”继承了“父类”的产业,而是继承了“父类”的特点,具体来说就是继承了“属性和方法”。

所以我认为“继承”更加贴切的说法是类似生物学上的“遗传”,按照中国话的说法就是“龙生龙,凤生凤,老鼠生来会打洞”,面向对象的继承意味“子类”遗传了了某些“父类”的属性和方法。

但就像生物学上的进化论一样,有遗传就有变异,正因为有了变异,才会有新的物种产生;有了变异,面向对象才有子类的出现。

当然,面向对象的进化不是“自然选择”的结果,而是你——伟大的程序猿——选择的结果。

除了可以选择子类如何变异外,你——伟大的程序猿——还可以控制另外一个遗传因素:你可以决定父类遗传什么给子类!

也就是说,你可以控制父类将哪些“基因”遗传下去,你也可以控制子类如何变异出哪些新基因。

所以,你——伟大的程序猿——就是面向对象世界的“上帝”!

继承 vs 抽象?

我们来看看一个继承的实例:

如果你还记得前面看过的“抽象”一章的内容,你一定会感到很惊讶:

抽象和继承的图完全相反,那这两个东东到底有什么区别和联系呢?

抽象:是分析和设计过程中的一个动作,一个技巧,通过抽象得出类

继承:是实现过程中的一个动作,基于抽象结果,通过编程语言的特性,完成抽象图的模拟。

因此,抽象和继承是前后衔接的关系,先有抽象,通过抽象得出类,后通过继承来表达抽象结果

时间: 2024-11-17 12:12:11

7、继承详解的相关文章

“全栈2019”Java第九十九章:局部内部类与继承详解

难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第九十九章:局部内部类与继承详解 下一章 "全栈2019"Java第一百章:局部内部类可以实现接口吗? 学习小组 加入同步学习小组,共同交流与进步. 方式一:关注头条号Gorhaf,私信"Java学习小组". 方式二:关注公众号Gorhaf,回复"Java学习小

CSS样式表继承详解

最近在恶补css样式表的基础知识.上次研究了css样式表之冲突问题详解 .这次是对 css 继承 特性的学习. 什么是css 继承?要想了解css样式表的继承,我们先从文档树(HTML DOM)开始.文档树由HTML元素组成. 文档树和家族树类似,也有祖先.后代.父亲.孩子和兄弟^_^.这很容易理解吧,笔者在这里就不一一赘述了.希望深入了解的朋友请google之. 那么CSS样式表继承指的是,特定的CSS属性向下传递到子孙元素. 下面举个例子,有如下html代码片段: <p>CSS样式表<

JavaScript继承详解(四)

在本章中,我们将分析Douglas Crockford关于JavaScript继承的一个实现 - Classical Inheritance in JavaScript. Crockford是JavaScript开发社区最知名的权威,是JSON.JSLint.JSMin和ADSafe之父,是<JavaScript: The Good Parts>的作者. 现在是Yahoo的资深JavaScript架构师,参与YUI的设计开发. 这里有一篇文章详细介绍了Crockford的生平和著作. 当然Cr

JavaScript继承详解(五)

在本章中,我们将分析John Resig关于JavaScript继承的一个实现 - Simple JavaScript Inheritance. John Resig作为jQuery的创始人而声名在外.是<Pro JavaScript Techniques>的作者,而且Resig将会在今年秋天推出一本书<JavaScript Secrets>,非常期待. 调用方式 调用方式非常优雅: 注意:代码中的Class.extend._super都是自定义的对象,我们会在后面的代码分析中详解

Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解

如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详细的详解了类的使用,但是由于篇幅的限制,关于类的很多特性都没有讲解到.今天在这篇文章中,详细的讲解Kotlin中类的特性.如果您对Kotlin中的类还没有一个整体的了解的话,请参见我上一篇文章Kotlin--类(class)详解 众所周知,Kotlin是一门面向对象的开发语言.那么他也有面向对象语言

Java继承详解

目录 前言 继承的格式: 继承的特点: 继承的优缺点 继承的注意点(重要) 继承的使用 前言 类是对对象的抽象,具有共同属性和行为的许多对象抽象出一个类. 例如:有三个学生小明,小红,小李都有姓名,年龄,身高,体重,都会吃,睡,学习等等,我们可以将这些属性和行为抽象出来成为一个类,也就是人类. 假设多个类存在相同属性和行为时,我们同样可以将这些内容抽取到单独的一个类中,那么这多个类没有必要再定义这些属性和行为,只需要继承这个单独的类就好了,这就是继承. 总结:类是对对象的抽象,继承是对某一批类的

PHP类的封装与继承详解

封装 把成员方法和成员属性封装到类中,隐藏属性和方法实现的细节,通过public.protected.private等限定类成员的访问权限,数据被保护在内部,只通过被授权的成员方法才可以操作,尽可能的对成员进行封装. public:方法或者属性在任何作用域下都可以访问到,而且是默认的,如果没有为一个属性或方法指定访问修饰符,它将是public.protected:本类和子类可以访问,外部对象不可以调用.private:只能在本类访问,子类与外部对象都不可能调用.经过private标记的方法或者属

javascript继承详解

常见继承分两种,一种接口继承,继承方法签名:一种实现继承,继承实际方法.js只支持后一种. 1原型链 首先看原型.构造函数.实例的关系.如果我们让一个函数的原型对象等于另一个的实例,然后另一个的原型对象又等于另一个的实例,以此类推,就构成了原型链. 代码: function SuperType(){ this.name=true; } superType.prototype.getValue=function(){ return this.name; } function SubType(){

php面向对象4部曲(二)继承详解

类的继承 简单理解: 某个类A具有某些特征,另一个类B,也具有A类的所有特征,并且还可能具有自己的更多的一些特征,此时,我们就可以实现:B类使用A的特征信息并继续添加自己的一些特有特征信息. 基本概念 继承:一个类从另一个已有的类获得其特性,称为继承. 派生:从一个已有的类产生一个新的类,称为派生. 继承和派生,其实只是从不同的方向(角度)来表述,本质上就是一个事情. 父类/子类:已有类为父类,新建类为子类.父类也叫“基类”,子类也叫“派生类” 单继承:一个类只能从一个上级类继承其特性信息.PH

PostgreSQL继承详解

PostgreSQL实现了表继承,这个特性对数据库设计人员来说是一个很有效的工具.SQL99 及以后的标准定义了类型继承特性,和我们在这里描述的很多特性有区别. 让我们从一个例子开始:假设我们试图制作一个城市数据模型.每个州都有许多城市,但是只有一个首府.我们希望能够迅速检索任何州的首府.这个任务可以通过创建两个表来实现,一个是州府表,一个是非州府表.不过,如果我们不管什么城市都想查该怎么办? 继承的特性可以帮助我们解决这个问题.我们定义capitals表,它继承自cities表: CREATE