zoukankan      html  css  js  c++  java
  • Typescript中private、public、protected修饰符的区别

    首先我们需要了解什么是类,class。

    什么是面向对象编程?

    即Object Oriented Programming,OOP。主要思想是把构成问题的各个事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙一个事物在整个解决问题的步骤中的行为。面向对象程序设计中的概念主要包括:对象、、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。

    面向过程是具体化的,流程化的,解决一个问题,你需要一步一步的分析,一步一步的实现。

    面向对象是模型化的,你只需抽象出一个类,这是一个封闭的盒子,在这里你拥有数据也拥有解决问题的方法。需要什么功能直接使用就可以了,不必去一步一步的实现,至于这个功能是如何实现的,管我们什么事?我们会用就可以了。

    面向对象的底层其实还是面向过程,把面向过程抽象成类,然后封装,方便我们我们使用的就是面向对象了。

    类Class

    以下是一个常见的类的写法。

    class Greeter {
        greeting: string;
        constructor(message: string) {
            this.greeting = message;
        }
        greet() {
            return "Hello, " + this.greeting;
        }
    }
    
    let greeter = new Greeter("world");
    

    我们声明一个Greeter类。这个类有3个成员:一个叫做greeting的属性,一个构造函数和一个greet方法。

    公共public,私有private与受保护protected的修饰符

    一般来说,在TypeScript里,成员都默认为public

    我们可以把上面的例子写成这样:

    class Greeter {
        public greeting: string;
        public constructor(message: string) {
            this.greeting = message;
        }
        public greet() {
            return "Hello, " + this.greeting;
        }
    }
    
    let greeter = new Greeter("world");
    

    当成员被标记成private时,它就不能在声明它的类的外部访问。

    class Greeter {
        private greeting: string;
        constructor(message: string) {
            this.greeting = message;
        }
    }
    new Greeter('abc').greeting; // 错误:'greeting'是私有的。
    

    protected修饰符与private修饰符的行为很相似,但有一点不同,protected成员在派生类中仍然可以访问。 例如:

    class Person {
        protected name: string;
        constructor(name: string) { this.name = name; }
    }
    
    class Employee extends Person {
        private department: string;
    
        constructor(name: string, department: string) {
            super(name)
            this.department = department;
        }
    
        public getElevatorPitch() {
            return `Hello, my name is ${this.name} and I work in ${this.department}.`;
        }
    }
    
    let howard = new Employee("Howard", "Sales");
    console.log(howard.getElevatorPitch());
    console.log(howard.name); // 错误
    
  • 相关阅读:
    浅析深度优先和广度优先遍历实现过程、区别及使用场景
    浅析为什么要用setTimeout模拟setInterval
    app弹出软键盘获取键盘高度不准确的原因及导致底部定位的元素无法贴近键盘的问题
    App平台iOS设备上因内存不足导致白屏、闪退的原因及其解决方案
    浅谈移动端开发技术
    浅析Console命令调试常用方法
    js正则表达式中的正向肯定预查和正向否定预查, 反向肯定和反向否定(这个翻译不准确)
    javascript的版本查看及js的历史
    【转】JS-正则表达式的反向引用
    【转】Linux虚拟网络设备之tun/tap
  • 原文地址:https://www.cnblogs.com/unclefang/p/12091700.html
Copyright © 2011-2022 走看看