JavaScript实现java中的|接口|继承|抽象类|继承|多态|对象|工厂模式|重写|重载|
时间:2022-05-06
本文章向大家介绍JavaScript实现java中的|接口|继承|抽象类|继承|多态|对象|工厂模式|重写|重载|,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
//定一个接口方法,
var Interface = function(name,methods){
if(arguments.length != 2){
throw new Error('this instance interface constructor arguments must be 2 length!');
}
this.name = name ;
this.methods = [] ;
for(var i = 0,len = methods.length ; i <len ; i++){
if( typeof methods[i] !== 'string'){
throw new Error('the Interface method name is error!');
}
this.methods.push(methods[i]);
}
}
Interface.ensureImplements = function(object){
if(arguments.length < 2 ){
throw new Error('Interface.ensureImplements method constructor arguments must be >= 2!');
}
for(var i = 1 , len = arguments.length; i<len; i++ ){
var instanceInterface = arguments[i];
if(instanceInterface.constructor !== Interface){
throw new Error('the arguments constructor not be Interface Class');
}
for(var j = 0 ; j < instanceInterface.methods.length; j++){
var methodName = instanceInterface.methods[j];
if( !object[methodName] || typeof object[methodName] !== 'function' ){
throw new Error("the method name '" + methodName + "' is not found !");
}
}
}
}
//定义一个继承的方法
var self_extend=function(child,parent){//原型继承方法,如需继承非原型方法,用parent_obj.call(this,())//还能实现多继承
var F = new Function();
F.prototype=parent.prototype;
child.prototype=new F();
child.prototype.constructor=child;
child.superClass=parent.prototype;
if(parent.prototype.constructor==Object.prototype.constructor){
parent.prototype.constructor=parent;
}
}
var create_car={//车的工厂类
create_car:function(type){
var car=eval('new '+type+' () ');//多态
Interface.ensureImplements(car,car_interface)
return car;
}
}
function car_shop(){//买车的父类
}
car_shop.prototype={
constructor:car_shop,
sell_car:function(type){
this.abstract_sell_car(type);
},
abstract_sell_car:function(){//抽象方法,子类实现
throw new Error("this method is abstract");
}
}
function benz_car_shop(){//各类汽车店,重写父类的方法
}
self_extend(benz_car_shop,car_shop);
benz_car_shop.prototype={
constructor:benz_car_shop,
sell_car:function(type){//覆盖父类的方法
var car;
var types=["benz"];
for(t in types){
if(types[t]===type){
car = create_car.create_car(type);
}else{
throw new Error("车店没有类型");
}
}
return car;
}
}
//车实现两个方法,然后四种子类汽车继承
var car_interface=new Interface('car_interface',["start","run"]);
function base_car(){
}
base_car.prototype={
constructor:base_car,
start:function(){
console.log(this.constructor.name+" this is start")
},
run:function(){
console.log("this is running")
}
}
function benz(){};
self_extend(benz,base_car);//继承父类
benz.prototype.drive_benz=function(){
console.log("benz driver");
}
function bwm(){};
self_extend(bwm,base_car);
function audi(){};
self_extend(audi,base_car);
var shop1=new benz_car_shop();
var car1=shop1.sell_car("benz");//多态
car1.start();
- 【LeetCode】关关的刷题日记23——Leetcode 66. Plus One
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861A k-roun
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
- 【Java数据结构学习笔记之三】Java数据结构与算法之队列(Queue)实现
- Comparison of Apache Stream Processing Frameworks: Part 2
- 2017 Multi-University Training Contest - Team 9 1005&&HDU 6165 FFF at Valentine【强联通缩点+拓扑排序】
- 2017 Multi-University Training Contest - Team 9 1004&&HDU 6164 Dying Light【数学+模拟】
- Python3选择排序
- 【DeepMind 公开课-深度强化学习教程代码实战01】迭代法评估4*4方格世界下的随机策略
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861C Did yo
- Codeforces Round #434 (Div. 2, based on Technocup 2018 Elimination Round 1)&&Codeforces 861B Which
- 信用卡安全问题:被用户忽视的识别码
- Python3快速排序
- Python3插入排序
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法