首页 > 其他分享 >类与继承及修饰符public 、private 、protected 的使用方法

类与继承及修饰符public 、private 、protected 的使用方法

时间:2023-09-06 09:12:26浏览次数:35  
标签:name 实例 子类 age 修饰符 private protected 父类 属性

1.什么是类

类可以理解成为一个模板,通过这个模板可以实例化某一个具体对象
比如说:我们定义一个动物类,
通过这个动物模板可以实例化成为猫或者其他具体的动物

2.类的基本使用

我们需要创建一个动物类;
这个动物有姓名、【默认值小可爱,字符串类型】
年龄、【默认值 20,数字类型】
性别、【字符串类型】
体重、【数字类型】
爱好【爱好可有可无,如果有必须是一个数组类型的】
这个动物类还有一个say的实例方法
下面我们就开始实现
class Animails {
    name: string
    age: number
    gender: string
    weight: string
    likes?: Array<any>
    //爱好这个属性可有可无,如果有必须是数组类型
    // 定义构造函数:为了将来实例化对象的时候,

    // 构造器直接对属性进行初始化
    // 需要给名称默认值小可爱、年龄默认值age=20
    constructor(
        name: string = '小可爱',
        age: number = 20,
        gender: string,
        weight: string,
        likes?: Array<any>
    ) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
        this.gender = gender
        this.weight=weight
    }
    // 定义实例方法
    say() {
        console.log(
            `大家好我是${this.name},
            今年${this.age}岁了,
            性别:${this.gender},
            体重:${this.weight},
        `);
    }
}
// 实例化对象
let pig = new Animails('猪猪侠', 10, '男', '30kg');
pig.say();//调用实例方法 // 大家好我是猪猪侠,今年10岁了,性别:男,体重:30kg.

 

3.实例化类的注意点

当类中的属性都有默认值时,
实例化对象的时候,
可以不用进行进行初始化。
类中的属性如果没有默认值,不是可选属性。必须一一赋值(初始化)
就是说:
我们必须对构造器中的属性进行一一赋值
除非构造器中有默认值
class Animails {
    name: string
    age: number
    constructor(
        name: string = '小可爱',
        age: number = 20,
    ) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
    }
    // 定义实例方法
    say() {
        console.log( `大家好我是${this.name}, 今年${this.age}岁了, `);
    }
}
// 实例化对象
let pig = new Animails();
pig.say();//调用实例方法

4.类与类之间的继承

A类继承了B类,那么A类叫做子类;B类叫做基类
子类--->又叫派生类
基类--->又叫父类或者超类
下面这个例子我们将子类MySon将会去继承Father父类。
子类有属于自己的方法sonsay;
子类可以去调用父类的方法super.say('子类');
同时我们在子类中将会去重写父类的方法
// 我们定义了一个超类【父类】
class Father {
    // 定义属性
    name: string
    age: number
    // 定义构造函数
    constructor(name: string, age: number) {
        // 初始化属性中的数据
        this.name = name
        this.age = age
    }
    // 定义实例方法
    say(str:string) {
        console.log( `大家好我是${this.name}, 今年${this.age}岁了,${str}呼喊的我 `);
    }
}

// 子类去继承了父类
class MySon extends Father {
    // constructor中的参数必须要满足父类。
    // 除非父类有默认参数或者父类中的属性不是必须属性。
    constructor(name: string, age: number) {
        // super调用父类中的构造函数
        super(name,age)
    }
    // 子类中自己的实例方法
    sonsay() {
        console.log('我是子类哈哈');
        //调用父类中的实例方法
        super.say('子类');
    }

    // 重写父类的方法
    say(name:string) {
        console.log(`我重写了父类的方法我是${name}`)
    }
}
// 进行实例化
let xiaoming = new MySon('小明', 19);
// 进行方法调用 
xiaoming.sonsay();  // 我是子类哈哈  // 大家好我是小明,今年19岁了,子类呼喊的我
xiaoming.say('小明'); // 我重写了父类的方法我是小明

 

5.修饰符的理解

修饰符:主要用于描述类中的成员(属性、方法、构造函数,)的可访问行
当一个类的成员变量没有修饰的时候,
默认的就是 public 进行修饰。
外界是可以进行访问的。任何位置都可以访问类中的成员

private 属性【只能够】在父类的内部直接进行访问;
class Person{
    age:10
    // private 属性只能够 在类的内部 进行访问;
    private name = "张三" 
    say() {
        console.log("我的名字是"+this.name)
    }
}

6.private的理解

如果父类定义的私有属性或者方法的时候,
那么继承的子类是不可以访问父类中的私有属性和私有方法
在实例化的时候也是不可以访问私有属性和私有方法

子类继承父类后 
访问父类属性通过this.属性名
调用父类的方法 this.方法名

下面我们看一下:
子类是否可以访问父类中的私有属性?
实例化后是否可以访问父类中的私有属性?
class Person {
    age: 10;
    // private 属性只能够在类的内部进行访问;
    private name = "张三";
    say() {
      //内部访问是ok的哈
      console.log("我的名字是" + this.name);
    }
}
class Children extends Person {
    sayage() {
        console.log('访问父类属性年龄',this.age)
    }
    // 下面这种访问是非法的会报错 
    sayname() {
        console.log('访问父类属性姓名',this.name)
    }
}
var xm = new Children();
xm.say();//我的名字是张三
// 报错,因为name是父类私有的,
// 实例化的时候不能够进行访问 
console.log( xm.name )

7.protected 的理解

protected修饰的属性和方法是受保护的,
只能够在父类和其子类中访问。
实例化后是不能够访问protected所修饰的属性和方法
class Person {
    protected age:string
    constructor(age:string) {
      this.age=age
    }
    say() {
        console.log("我的年龄是" + this.age);
    }
}

// 继承父类
class Children extends Person {
    callPar() {
      super.say(); //super 可以调用父类中的属性方法
    }
    hello() {
      console.log("我今年" + this.age);
    }
}

var xm = new Children('10');
xm.hello(); //我今年10
<!-- 提示 属性“age”受保护,只能在类“Person”及其子类中访问 -->
console.log(xm.age)

标签:name,实例,子类,age,修饰符,private,protected,父类,属性
From: https://www.cnblogs.com/worldforest/p/17681389.html

相关文章

  • C# readonly修饰符
    readonly修饰符在作祟强化官方解释:readonly是一个修饰字段的关键字:被它修饰的字段只有在初始化或者构造函数中才能够赋值.readonly修饰的引用类型字段必须始终引用同一对象:readonly修饰符可防止字段替换为引用类型的其他实例,但是,readonly不会妨碍通过该字段修改字段引用的......
  • 解决小程序报错 getLocation:fail the api need to be declared in the requiredPriva
    一、unipp项目打开uniapp项目的配置文件manifest.json,选择“源码视图”。/*小程序特有相关*/"mp-weixin":{"appid":"你的开发者id","setting":{"urlCheck":true,"es6":true,"postcss":......
  • C++中const修饰符的含义
    const修饰符在C++中的用途主要是四类:1,变量类型声明的修饰:禁止对变量或对象的修改;2,函数形参中的声明修饰:禁止对传递的对象作修改,或禁止对引用变量作修改;3,函数返回类型前的修饰:禁止修改函数返回的对象;4,类成员函数声明(小括号之后、大括号之前)末尾的修饰:禁止该成员函数修改类中的任何......
  • 微软面向企业的Private ChatGPT 参考应用 Chat Copilot
    这两天你可能看过这篇文章:微软面向企业的PrivateChatGPT开源!超详细安装流程反馈![1],这篇文章顶多就是一个AzureOpenAI服务的简单Demo,就连插件机制都没有,这也是促使我写这篇文章的因素之一。微软在Build大会上宣布了CopilotStack,CopilotStack被描述为一个人工智能开发框......
  • c#的修饰符顺序以及修饰符说明,访问权限
    声明类的顺序:访问修饰符+类修饰符+class+类名例:publicclassClass1{}internalsealedclassClass2:Class1{}声明成员(方法或者参数)的顺序:访问修饰符+成员修饰符+值类型+类名例:publicoverrideintAA()publicnewintAA(intx)publicnewstaticinta=5;public......
  • uniapp获取位置时显示getLocation:fail the api need to be declared in the required
    uniapp获取位置时显示getLocation:failtheapineedtobedeclaredintherequiredPrivateInfosfieldinapp.json/ext.json解决方式:1.manifest.json文件 "mp-weixin" 中添加"permission":{"scope.userLocation":{&quo......
  • 第十六节 面向对象进阶(多态&包&final&权限修饰符&代码块)
    今日内容多态包final权限修饰符代码块教学目标能够说出使用多态的前提条件理解多态的向上转型理解多态的向下转型能够知道多态的使用场景包的作用public和private权限修饰符的作用描述final修饰的类的特点描述final修饰的方法的特点......
  • Java修饰符与继承
    一、class(类)可以继承类(仅限一个)继承普通类:不一定要重写父类的所有方法继承抽象类:必须重写父类的所有抽象方法,除非将自己定义为抽象类只可继承父类【public、protected】的字段、方法(privated不可继承)包含父类的构造方法子类将从父类继承过来的方法的地址信息保存到自己的......
  • C++入门到放弃(04)——类的访问权限:public、private、protected
    1.成员访问权限假定以下类:classBase{public://constructfunctionBase(inta=0,intb=0,intc=0):m_public(),m_protected(),m_private(){}intm_public;voidpublic_fun(){cout<<m_public<<endl;}protected:intm_prote......
  • target_link_libraries中的PRIVATE INTERFACE PUBLIC
    CMaketarget_link_librariesInterfaceDependenciesCMake的链接选项:PRIVATE,INTERFACE,PUBLICIfyouarecreatingasharedlibraryandyoursourcecppfiles#includetheheadersofanotherlibrary(Say,QtNetworkforexample),butyourheaderfilesdon'ti......