26-JavaScript-面向对象-三大特征-重载和覆盖
来源:互联网 发布:哈利波特三人组 知乎 编辑:程序博客网 时间:2024/06/06 16:14
-JS面向对象编程 -- 三大特征
- 封装
- 继承
- 多态
-重载和覆盖
-综合案例
把一类事物共有的属性和行为抽取出来,
形成一个物理模型(模板).
这种研究问题的方法称为抽象.
封装就是把抽象出来的属性和对属性的操作封装在一起,
属性被保护在内部,
外部, 只有通过被授权的操作(函数), 才能操作属性.
① 公有: 对外公开
② 私有: 只有类里面才可访问
使用 prototype 定义的方法, 不能访问私有属性/方法.
①更符合人的思维习惯
②代码复用
通过对象冒充的方式, 可实现多继承
Object是 所有类 的基类
多态是指一个引用在不同情况下的多种状态.
Java中是通过指向父类的引用,来调用不同子类中实现的方法.
JS中, 变量的类型由JS引擎动态决定.
如:
var obj = new Cat();
obj.eat();
obj = new Dog();
obj.eat();
同一种功能的不同实现, 通过参数列表区分.
JS不支持重载, 因为JS参数(类型和个数)可变
原理: 重名的方法后者覆盖前者.
- 封装
- 继承
- 多态
-重载和覆盖
-综合案例
1. 概念
1.1 抽象
把一类事物共有的属性和行为抽取出来,
形成一个物理模型(模板).
这种研究问题的方法称为抽象.
1.2 封装
1) 介绍
封装就是把抽象出来的属性和对属性的操作封装在一起,
属性被保护在内部,
外部, 只有通过被授权的操作(函数), 才能操作属性.
2) 访问权限
① 公有: 对外公开
② 私有: 只有类里面才可访问
3) 举例
function Employee() { this.name = "张三"; // 公有属性 var salary = 3000; // 私有属性 this.getSalary = function() { // 公有方法(特权方法) return this.salary; } this.display = function() { // 公有方法 调用 私有方法 return show(this); } function show() { // 私有方法(内部方法),可访问私有属性 return name + "---" + salary; } } var emp = new Employee(); console.info( emp.name ); console.info( emp.salary ); console.info( emp.getSalary ); console.info( emp.display() ); /* 张三 undefined function() ---3000 */
4) 注
使用 prototype 定义的方法, 不能访问私有属性/方法.
1.3 继承
1) 继承的必要性
①更符合人的思维习惯
②代码复用
2) 继承的实现
通过对象冒充的方式, 可实现多继承
Object是 所有类 的基类
3) 示例
// 基类 function Person(name, age) { this.name = name; this.age = age; this.show = function() { return this.name + "---" + this.age; } } // 扩展类 function Student(name, age) { // 将所有的属性和方法 赋值给 属性person this.person = Person; // 初始化, JS动态语言,如不初始化则不会分配内存 this.person(name, age); } var stu = new Student("张三", 24); console.info( stu.show() ); // 张三---24
1.4 多态
多态是指一个引用在不同情况下的多种状态.
Java中是通过指向父类的引用,来调用不同子类中实现的方法.
JS中, 变量的类型由JS引擎动态决定.
如:
var obj = new Cat();
obj.eat();
obj = new Dog();
obj.eat();
2. 重载(overloading) 和 覆盖(overriding)
2.1 重载
同一种功能的不同实现, 通过参数列表区分.
JS不支持重载, 因为JS参数(类型和个数)可变
2.2 覆盖
原理: 重名的方法后者覆盖前者.
// 基类 function Person(name, age) { this.name = name; this.age = age; this.show = function() { return this.name + "---" + this.age; } } // 扩展类 function Student(name, age) { // 将所有的属性和方法 赋值给 属性person this.person = Person; // 初始化, JS动态语言,如不初始化则不会分配内存 this.person(name, age); // 覆盖, 比Person中的show后出现. this.show = function() { return this.name + "+++" + this.age; } }
3. 综合案例
//------------- // 主人 function Master(name) { this.name = name; this.feed = function(animal, food){ return this.name + "给" + animal.name + "喂" + food.name; } } //------------- // 动物 function Animal(name) { this.name = name; this.eat = function(food) { return this.name + "吃" + food.name; } } // 狗 function Dog(name) { this.animal = Animal; this.animal(name); } // 猫 function Cat(name) { this.animal = Animal; this.animal(name); } //------------- // 食物 function Food(name) { this.name = name; } // 骨头 function Bone(name) { this.food = Food; this.food(name); } // 鱼 function Fish(name) { this.food = Food; this.food(name); }//------------------------------------ var fishFood = new Fish("鲫鱼"); // console.info( fishFood.name ); var catAnimal = new Cat("小白猫"); // console.info( catAnimal.name ); var master = new Master("张三"); // console.info( master.name ); console.info( master.feed(catAnimal, fishFood) ); // 张三给小白猫喂鲫鱼// --------------- var boneFood = new Bone("大骨头"); var dogAnimal = new Dog("大黑狗"); console.info( master.feed(dogAnimal, boneFood) ); // 张三给大黑狗喂大骨头
- 26-JavaScript-面向对象-三大特征-重载和覆盖
- JavaScript面向对象的三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 面向对象三大特征
- 第七章:JavaScript面向对象三大特征
- 面向对象在javascript中的三大特征之封装
- 面向对象在javascript中的三大特征之继承
- 面向对象在javascript中的三大特征之多态
- 面向对象的三大特征和五大原则
- 面向对象三大特征和解决的问题
- 面向对象三大特征和解决的问题
- 计算歌手的最后得分一
- VBS下载者
- “初始化”: 从“ULONGLONG”转换到“unsigned int”,可能丢失数据
- Android之drawable state各个属性详解
- JavaScript中的类型转换
- 26-JavaScript-面向对象-三大特征-重载和覆盖
- Java计算两个时间差
- OpenGL基础知识
- EXTJS4 Array 使用方法总结
- map文件介绍及使用
- 关于Instruments跟踪分析app
- 天马行空的ACM现场赛回顾
- NOI 国家集训队论文集
- 一个比较笨的方法,算a+b 倒叙相加