12_类的封装与继承

1. 类的封装

1.1 封装概述

在这里插入图片描述在这里插入图片描述

  • 添加local就无法在外部通过句柄访问内部变量,但是可以通过类的方法访问这种变量。
    在这里插入图片描述
    在这里插入图片描述
  • D。实际上编译不通过。
    在这里插入图片描述
  • public不是SV的关键词。

1.2 定义成员方法

在这里插入图片描述
在这里插入图片描述

  • 本例子中的方法是动态的,因此若要调用就必须实例化对象。
  • 若我们不定义new,系统会自动帮助我们定义一个空的new。

1.3 类与结构体、module的异同

在这里插入图片描述

在这里插入图片描述

  • B:静态句柄是可以存在的,同时new,那就会在编译的时候例化对象。

1.4 类的辨析

在这里插入图片描述

  • 索引变量原则:由近到远。
  • this.name = name中后一个name是string name,this.name是当前类的成员变量。

2. 类的继承

2.1 概述

在这里插入图片描述
在这里插入图片描述

  • 黑猫白猫都是猫的子类,因此猫的protected属性和公共的方法都可以被子类调用。this.color就是指子类从父类中继承的color属性。
  • local型变量只能通过父类的方法对其进行操作。
    在这里插入图片描述
  • D

2.2 类继承案例1

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • this表示当前类中寻找要使用的方法或者属性
  • super表示要找到当前类的父类,在子类同名方法中,先调用父类的方法,之后添加子类自己的方法内容。子类的方法继承父类方法必须要有super。
    在这里插入图片描述
  • 当BadTr想调用属性crc时,有三种方式:
    • this.crc:找到本类中的crc,其实是找到从父类中继承得到的crc属性
    • super.crc:直接去父类找crc
    • crc:由近到远去找crc

2.3 类继承案例2

在这里插入图片描述
在这里插入图片描述

  • super表示子类的方法对父类做了继承
    在这里插入图片描述
  • new有三个任务:开辟空间、成员变量初始化、返回句柄
  • 若子类中的new函数中没有super.new,那就是不去按照父类new函数中的命令去进行变量初始化等任务,但是父类中的成员变量与方法的空间也会开辟,也可以返回句柄。
  • 一般子类中的new函数会将super.new写在第一行

2.4 成员覆盖

在这里插入图片描述
在这里插入图片描述

  • 子类的句柄可以赋值给父类的句柄,父类和子类的句柄都指向同一个对象。但是由于t是父类句柄,他只可以指向父类所包括的属性和方法,wr是子类句柄可以指向父子所有的属性和方法。wr.super.def即可访问父类的def。
  • 假设有一个子类句柄wr2,wr2 = t是不允许的(对于编译器无法得知应该指向纯父类对象空间还是子类对象空间);使用$cast(wr2,t)可以通过动态检查的方式,看当前t的具体指向来将父类句柄赋值给子类句柄,若t指向父类对象,返回0赋值失败,若t指向子类对象,返回1赋值成功。
  • 打印值分别为200,100
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arist9612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值