「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」
继承
继承是面向对象软件技术的一个概念,主要是为了能够复用已有的代码,也支持扩展自有的属性和方法。在使用 Java 或 c#等面向对象编程语言开发时 ,实现类的继承都通过关键字 extends 实现继承关系。
继承,其实就是子类继承父类的特征和行为,使得子类对象具有父类的实例域和方法,就是让子类拥有和父类相同的行为。
就比如,有Dog ,Cat ,Tiger 三种动物,都有名字,年龄等属性,都能够吃,睡觉,叫等行为,可以通过使用继承,使用父类的属性和方法,不同的睡法和叫声可以重写父类的方法,这样的继承可以减少代码量,也使得代码结构更清晰。
Java 或 C# 的继承
-
继承分类
- 单继承,一个类有且仅能继承一个实体父类
- 多继承,一个类可以继承多个父类,但前提必须父类都是接口类
- 多层继承:即B extends A ,C extends B ,C类就是多层继承,C类就有所有类的属性和方法
-
继承特性
JavaScript 继承
JavaScript 是动态的,它的继承是怎么实现继承的?
JavaScript 只有一种结构:对象。
每个实例对象都有一个私有属性(称之为 proto )指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(proto),层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
所以,JavaScript 发生继承关系后,我们访问一个对象属性时,它会在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到搜索到名字匹配的属性。
ES2015/ES6 中引入了 class 关键字,是否也有和基于类的语言 (如 Java 或 C#) 的一样实现继承关系?
当然不是,因为还是 通过extends 对子构造函数.prototype = new 父构造函数,这样进行底层封装处理了
function A(){}
var a = new A()
a.__proto__ = A.prototype
参考资料:
\