10 # 类:继承和成员修饰符

简介: 10 # 类:继承和成员修饰符

类的基本实现

  1. 类的成员属性都是实例属性,而不是原型属性,类的成员方法都是原型方法。
class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    run() {}
}
console.log(Dog.prototype);
let dog = new Dog("wangwang");
console.log(dog);


  1. 实例的属性必须具有初始值或者在构造函数中赋值,否则会报错。
class Dog {
    constructor(name: string) {
        // this.name = name;
    }
    name: string = "wangwang";
    run() {}
}


类的继承

class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name);
        // this 需在 super 之后
        this.color = color;
    }
    color: string;
}


类的成员修饰符

1. public

公有成员,类的所有属性默认都是 public,对所有人可见

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    // 显示声明
    public name: string;
    run() {}
}

2. private

类的私有成员,只能在类的本身调用,不能被类的实例调用,也不能被子类调用。

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    private privateMethod() {}
}
let dog = new Dog("wangwang");
// 下面会报错:属性“privateMethod”为私有属性,只能在类“Dog”中访问。
console.log(dog.privateMethod());
class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name);
        // this 需在 super 之后
        this.color = color;
        // 下面会报错:属性“privateMethod”为私有属性,只能在类“Dog”中访问。
        this.privateMethod();
    }
    color: string;
}


给构造函数添加 private, 这个类不能被实例化,也不能被继承。

class Dog {
    private constructor(name: string) {
        this.name = name;
    }
    name: string;
    run() {}
    private privateMethod() {}
}
// 下面报错:类“Dog”的构造函数是私有的,仅可在类声明中访问。
let dog = new Dog("wangwang");
// 下面报错:无法扩展类“Dog”。类构造函数标记为私有。
class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name);
        this.color = color;
    }
    color: string;
}


3. protected

受保护成员,只能在类的本身和子类中调用,不能被类的实例调用。

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    protected protectedMethod() {}
}
let dog = new Dog("wangwang");
// 下面报错:属性“protectedMethod”受保护,只能在类“Dog”及其子类中访问。
console.log(dog.protectedMethod());
class Husky extends Dog {
    constructor(name: string, color: string) {
        super(name);
        this.color = color;
        // 子类调用不报错
        this.protectedMethod();
    }
    color: string;
}


给构造函数添加 protected, 这个类不能被实例化,只能被继承,相当于声明了一个基类。

4. readonly

只读属性,一定要被初始化,不能被修改。

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    run() {}
    readonly legs: number = 4;
}

构造函数的参数也可以添加修饰符,作用就是自动将参数变为实例的属性,可以省略在类中的定义

class Husky extends Dog {
    constructor(name: string, public color: string) {
        super(name);
        this.color = color;
    }
    // 下面这个就可以省略
    // color: string;
}


5. static

类的静态成员,只能通过类名来调用,不能被类的实例调用。也可以被继承。

class Dog {
    constructor(name: string) {
        this.name = name;
    }
    name: string;
    run() {}
    static food: string = "bones"
}
let dog = new Dog("wangwang");
// 可以
console.log(Dog.food); // bones
// 下面报错
console.log(dog.food);
class Husky extends Dog {
    constructor(name: string, public color: string) {
        super(name);
        this.color = color;
    }
}
// 可以
console.log(Husky.food); // bones


目录
相关文章
|
11月前
|
运维 监控 安全
在实际应用中,如何选择基于不同域名还是不同 IP 进行代理多服务的配置?
综上所述,在实际应用中选择基于不同域名还是不同 IP 进行代理多服务的配置,需要根据具体的业务需求、可扩展性、性能、安全性以及维护和管理成本等多方面因素进行综合考虑,权衡利弊,选择最适合自己系统架构和运营需求的配置方式。
|
10月前
|
安全 程序员 C语言
【C语言】指针的爱恨纠葛:常量指针vs指向常量的指针
在C语言中,“常量指针”和“指向常量的指针”是两个重要的指针概念。它们在控制指针的行为和数据的可修改性方面发挥着关键作用。理解这两个概念有助于编写更安全、有效的代码。本文将深入探讨这两个概念,包括定义、语法、实际应用、复杂示例、最佳实践以及常见问题。
306 7
点击全选获取所有复选框
点击全选获取所有复选框
57 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue的大学生二手闲置物品置换交易管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue的大学生二手闲置物品置换交易管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
257 0
|
Web App开发 缓存 前端开发
WebKit简介及工作流程
WebKit简介及工作流程
|
Java Spring
spring事务传播机制
spring事务传播机制
69 0
|
设计模式 自然语言处理 前端开发
Java 设计模式最佳实践:1~5(2)
Java 设计模式最佳实践:1~5(2)
109 0
|
存储 算法 数据处理
【数据结构】静态表查找之顺序查找、二分查找、分块查找
【数据结构】静态表查找之顺序查找、二分查找、分块查找
798 0
【数据结构】静态表查找之顺序查找、二分查找、分块查找
Flutter中 解决自定义阿里妈妈图标一直显示不出来的问题
Flutter中 解决自定义阿里妈妈图标一直显示不出来的问题
276 0
|
监控 前端开发 开发工具
KgCaptcha 文字点选验证码数据监控
在信息时代, 对信息处理和利用能力的强弱成为决定企业兴衰成败的关键。一个成熟的数据监控展示平台是我们需要考虑的问题。 下面小编将用KgCaptcha,带领大家使用一个漂亮的数据监控展示平台!
KgCaptcha 文字点选验证码数据监控