继承和成员修饰符

类的基本实现

定义一个Dog类,与ES不同的是,我们为成员属性添加了类型注解,也为构造函数的参数增加了类型注解。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  run() {}
}

需要注意的是:
    (1)无论是在ES还是ts中,类成员的属性都是实例属性,而不是原型属性;类成员的方法也都是实例方法。对比可见:
  console.log(Dog.prototype) // {run: ?, constructor: ?}
  let dog = new Dog(‘wangwang‘)
  console.log(dog) // Dog {name: "wangwang"}
  (2)与ES不同的是,实例的属性必须具有初始值,或者在构造函数中被初始化。 以下√的三种方式均是可以的:

  class Dog {
    constructor(name: string) {
      // this.name = name   √
    }
    // name: string = ‘dog‘   √
    // name?: string = ‘dog‘   √
    run() {}
  }

类的继承(用extends关键字)

class Husky extends Dog {
  constructor(name: string, color: string) {
    super(name)
    this.color = color
  }
  color: string
}

需要注意的是:

(1)派生类的构造函数必须包含‘super’调用,而且参数必须包含父类的参数。

(2)新添加的属性要初始化,一般在constructor中,而且用到的this必须在super调用后才能调用。

类的成员修饰符(这是ts对ES的扩展)

公有成员:对所有人都是可见的,格式public+属性/函数名

私有成员,也能在类的本身被调用,而不能被类的实例调用,也不能被子类调用,格式private+属性/函数名

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  run() {}
  private pri() {}
}
let dog = new Dog(‘wangwang‘)
dog.pri()   ?
class Husky extends Dog {
  constructor(name: string) {
    super(name)
    this.pri()   ?
  }
}

PS:
    也可以给构造函数加上私有成员属性,作用是类既不能被实例化,也不能被继承,都会提示错误。

  class Dog {
    private constructor(name: string) {
      this.name = name
    }
    name: string
  }
  let dog = new Dog(‘wangwang‘)   ?
  class Husky extends Dog { }   ?

受保护成员,只能在类或子类中访问,而不能在类的实例中访问,格式protected+属性/函数名。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  protected pro() {}
}
let dog = new Dog(‘wangwang‘)
dog.pro()   ?
class Husky extends Dog {
  constructor(name: string) {
    super(name)
    this.pro()     ?
  }
}

PS:
  构造函数也能被声明为protected,作用是这个类不能被实例化,只能被继承,就相当于声明了一个基类。
  class Dog {
    protected constructor(name: string) {
      this.name = name
    }
    name: string
  }
  let dog = new Dog(‘wangwang‘) // ?
  class Husky extends Dog {
    ......
  }

只读属性:不可以被更改,切记它跟实例属性一样,一定要被初始化。

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

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

class Husky extends Dog {
  constructor(name: string, public color: string) {
    super(name)
    this.color = color
  }
  // color: string
}

静态成员:只能通过类名来调用,而不能通过子类调用,它是可以被继承的,格式static修饰符+属性名。

class Dog {
  constructor(name: string) {
    this.name = name
  }
  name: string
  static food: string = ‘bones‘
}
let dog = new Dog(‘wangwang‘)
console.log(Dog.food) // ?
// console.log(dog.food) ?
class Husky extends Dog {
  constructor(name: string, public color: string) {
    super(name)
    this.color = color
  }
}
console.log(Husky.food)  // ?

原文地址:https://www.cnblogs.com/xfxing/p/12652423.html

时间: 2024-08-28 04:49:29

继承和成员修饰符的相关文章

python学习笔记-Day8 上(pickle补充、字段、面向对象成员、成员修饰符、特殊方法)

pickle 序列化补充 # pickle load # 现在有两个python程序,调用关系如下 # s1.py class foo: …. Obj = foo(x,y) Pickle.dump(obj, open(‘db’,’wb’)) S2.py # s2.py from s1 import foo pickle.load(db) # s2.py 反序列化加载包含对象,一定要先导入对象对应的类,否则Pickle load将会报错 类多继承关系 有共同父类的继承关系如下 如图,如果我们有两个

学习C#修饰符:类修饰符和成员修饰符

C#修饰符之类修饰符:public.internal. partial.abstract.sealed.static C#修饰符之成员修饰符:public.protected.private.internal.sealed.abstract.virtual.override.readonly.const Public:最开放,所有的本程序集以及其他的程序集里面的对象都能够访问 Protected:比较开放,自身成员以及子类成员可访问 Private:只有自身成员才能够访问 Internal:本程

Python类成员及类成员修饰符

13.面向对象:多态.继承.封装成员:字段:普通字段.静态字段方法:普通方法.静态方法.类方法特性:property,将方法伪造为字段,可以直接使用类.方法名调用,不用加() 成员修饰符:公有和私有,私有的字段和方法可以通过对象中的其他普通方法间接进行调用私有字段:__field, 以__双下划线开头的字段,私有字段只能在自己的对象中才能使用,继承后也无法使用私有方法:__function, 以__双下划线开头的方法,私有字段只能在自己的对象中才能使用,继

文成小盆友python-num8 面向对象中的成员,成员修饰符,特殊成员,异常处理,设计模式之单例模式

本节主要内容: 1.面向对象中的成员 2.成员修饰符 3.特殊成员 4.异常处理 5.设计模式之单例模式 一.面向对象中的成员(类的成员) 类的成员总共可以分为3大类,每类中有不同的分支. 1.总述,基本分类 如下图所示: 类成员包括字段,方法,和属性 2.字段 如上图字段分为普通字段和静态字段,两者的使用有区别,但是最大的区别在于两者在内存中的保存位置有区别. 普通字段属于对象而静态字段属于类,在使用过程中谁的字段就由谁来调用. 静态字段和普通字段的定义如下: 在调用时分各自调用 #####类

C#继承机制 继承与访问修饰符

继承与访问修饰符 访问修饰符是一些关键字,用于指定声明的成员或类型的可访问性.类的继承中有四个访问修饰符: public protected internal private.使用这些访问修饰符可指定下列五个可访问性级别: public protected internal internal protected private. 1.继承中关于可访问域的一些问题 基类的所有成员(实例构造函数.析构函数和静态构造函数除外)都由派生类型继承.这甚至包括基类的私有成员.但是,私有成员的可访问域只包括声

Python学习:17.Python面向对象(四、属性(特性),成员修饰符,类的特殊成员)

一.属性(特性) 普通方法去执行的时候,后面需要加括号,特性方法执行的时候和静态字段一样不需要不需要加括号. 特性方法不和字段同名. 特性方法不能传参数. 在我们定义数据库字段类的时候,往往需要对其中的类属性做一些限制,一般用get和set方法来写,那在python中,我们该怎么做能够少写代码,又能优雅的实现想要的限制,减少错误的发生呢,这时候就需要我们的@property. 获取特性 class Foo: def __init__(self,name): self.name = name #

Python学习 :面向对象 -- 成员修饰符

成员修饰符 两种成员 - 公有成员 - 私有成员, __字段名 - 无法直接访问,只能通过内部方法来间接访问私有成员 简例:公有成员与私有成员  class Info: country = '中国' # 静态字段 __gender = '男' # 静态字段私有化 def __init__(self,name,age): self.name = name self.__age = age # age字段为私有的,外部无法直接访问 def show(self): return self.__age,

Python面向对象成员修饰符

成员修饰符就是设置类的成员有些是公开的有些是私有的,公开的是在外部通过对象或者类可以调用,但是私有的只能通过类的内部才可以调用. 静态字段修饰 #!/usr/bin/env python # _*_coding:utf-8 _*_ class Foo:    # 公有的静态字段    ClassMembers = "公开的"    # 私有的静态字段    __ClassMembers = "私有的" # 执行公有的静态字段 print(Foo.ClassMembe

Python_day8_面向对象(多态、成员修饰符、类中特殊方法、对象边缘知识)、异常处理之篇

一.面向对象之多态 1.多态:简而言子就是多种形态或多种类型 python中不支持多态也用不到多态,多态的概念是应用与java/C#中指定传参的数据类型, java多态传参:必须是传参数的数据类型或传参的子类类型 面向对象总结: 面向对象是一种编程方式,此编程方式的实现是基于类和对象的使用 类:是一个模板,模板中包含了多个函数共使用,即类中可包含多个函数(类中的函数即叫做方法) 一般疑问: 1)什么样的代码才是面向对象? 简单来说,如果程序中的所有功能否是由 “类”和“对象”实现,那么就是面向对