面向对象学习

什么是面向对象

  • 把客观对象抽象成属性数据和对数据的相关操作,把内部细节和不相关的信息隐藏起来
  • 把同意类型的客观对象的属性和操作绑定在一起,封装成类
    • 面向对象分析 OOA
    • 面向对象设计 OOD
    • 面向对象编程 OOP

概念

  • 类,对象(实例)

这里需要提示一下下,类,本来是没有的概念,就像本来石头也不叫石头的,我们为了方便记忆和分类,就给他起了一个名字,这就是定义类

  • 父类是公共的

问题又来了,随着时代的发展和进步,我们发现石头原来有各种各样的,如玉,岩石,鹅卵石,不管怎么样,都是石头,这个时候石头就是他们的父类,他们都具备石头的有点

  • 定义类
    class Animal{
        constructor (name) {
            this.name = name
        }
        say () {
            console.log(`my name is ${this.name}`)
        }
    }
    let dog = new Animal('littel dog')
    dog.say()
    
    
  • 继承类
  1. 子类继承父类
  2. 继承可以把公共方法抽离出来,提高复用,减少冗余

嗯换一个列子说说:有一个人张三,他生了儿子,管他叫做张大宝,那么张大宝就继承了张三的姓,或者说部分基因,要不然也不能说长的像他爸爸
后来张大宝长大了,要工作,然后他父亲就问他以后想做什么,大宝说,我想着xxx, 这个时候如警察,医生,码农每个职业都有自己特有的技能,需要单独去学习,然后成为警察,或者医生,或者码农,这就是抽离


 class Animal{
     constructor (name) {
         this.name = name
     }
     say () {
         console.log(`my name is ${this.name}`)
     }
 }
 class Dog extends Animal{
     constructor() {
         super('狗')
     }
     speak () {
         console.log('汪汪汪')
     }
 }
 let dog = new Dog('littel dog')
 dog.say()
 dog.speak()
  • 封装
    • 把数据封装起来
    • 减少耦合,不该访问的不让外部访问
    • 利于数据的接口权限管理
    • ES6 不支持私有属性,一般_ 开头的都会私有的,不要使用
    • 实现
      • public: 共有修饰符,默认修饰符
      • protected:受保护的修饰符,可以被类和子类使用protect修饰的属性和行为
      • private:私有修饰符,只可以在类内部使用

到了后来张大宝长大了,已经做了一名码农,自己潜心学习nodejs,工作岗位是前端切图仔,这个时候他就和大多数切图在一样,会基本的切图计能(public)
但是他喜欢把自己学到的只是出去,写博客什么的,分享供他人学习和借鉴(protect)
大宝毕竟是大宝,他还利用闲暇时间研究了很多心法,内功深厚,各种工作中的疑难杂症上手分分钟解决(private)

   // 创建父类
   class Animal{
       public name;
       protected age;
       private weight;
       constructor (name, age, weight) {
           this.name = name;
           this.age = age;
           this.weight = weight;
       }
   }
   // 继承父类
   class Person extends Animal {
       private money;
       constructor (name, age, weight, money) {
           super(name, age, weight);
           this.money = money;
       }
       getName(){
           console.log(this.name)
       }
       getAge(){
           console.log(this.age)
       }
   }
   // 创建实例
   let p = new Person('leo', 18, 190, 100)
   
  • 多态

    • 同一个接口可以不同实现
    • 保持子类开放性和灵活性
    • 面向接口编程

时代是多变的,随着几年的发展,大宝发现切图仔越南越难做了,后来他在工作中学会了各种编码技能,然后当别的切图仔都要失业了,但是大宝会养猪,他养猪去了,大宝还是大宝,但已经不是那个切图仔了…

/**
 * @desc 多态
 */
class Animal{
    name: string;
    constructor (name) {
        this.name = name;
    }
    // 把eat当成一个接口,让子类继承,实现不同的功能,就是多态
    eat(food) {

    }
}

class Dog extends Animal{
    eat (food) {
        console.log(`${this.name}吃${food}`)
    }
}

class Person extends Animal{
    eat (food) {
        console.log(`${this.name}吃${food}`)
    }
}


let dog = new Dog('狗')
dog.eat('包子')

let p = new Person('ren')
p.eat('亏')

结束语

忘记了什么后学的设计模式,知道某一天面试,某官问道,发现自己基本上已经忘,近期抽时间学习一下,温故而知新啊啊啊啊。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值