Vala 编程语言教程-继承

继承 ‌

在 Vala 中,一个类可以继承自 ‌一个或零个‌ 其他类。尽管实际开发中通常继承一个类(不同于 Java 等语言的隐式继承机制),但 Vala 并不强制要求必须继承。

当定义继承自其他类的子类时,子类的实例与父类将形成 ‌**"is-a"**‌ 关系。这意味着:

  1. 子类实例同时也是父类实例;
  2. 父类实例支持的操作,子类实例均支持;
  3. 任何需要父类实例的场景,均可替换为子类实例。

在类定义中,开发者可以 ‌精确控制‌ 对象方法和数据的访问权限。以下示例演示了多种权限修饰符的用法:

cs 复制代码
class SuperClass : GLib.Object {

    private int data;

    public SuperClass(int data) {
        this.data = data;
    }

    protected void protected_method() {
    }

    public static void public_static_method() {
    }
}

class SubClass : SuperClass {

    public SubClass() {
        base(10);
    }
}
  • data 是 SuperClass 的 ‌私有实例成员 ‌,仅允许 SuperClass 内部的代码访问;
  • protected_method 是 SuperClass 的 ‌受保护实例方法 ‌,仅允许 SuperClass 及其子类的实例调用;
  • public_static_method 是 SuperClass 的 ‌公共静态方法 ‌:
    • static 修饰符使其无需实例即可调用(执行时无 this 引用);
    • public 修饰符允许任何代码调用,无论其与 SuperClass 的关系。

通过上述定义,SubClass 实例将包含 SuperClass 的所有三个成员,但只能访问 ‌非私有成员 ‌(即 protected_method 和 public_static_method)。外部代码仅能访问 public_static_method。

‌构造函数链式调用 ‌:

子类构造函数可通过 base 关键字调用父类构造函数(如示例中 base(10) 调用了父类的 SuperClass(int data) 构造函数)。

相关推荐
weixin_460443562 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
Cc.Y5 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
sm_926787056 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev6 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
by209996 小时前
C++ 多态:同一个基类接口,调用不同的函数
开发语言·c++·经验分享·多态
笔墨登场说说6 小时前
flink bin/start-cluster.sh 帮我做成开机启动
开发语言·python
Sarvartha6 小时前
Lambda 表达式和函数式接口
java·开发语言
kimloner6 小时前
开源一个 376KB 的 Windows 桌面小工具:便签 + 截图标注 + OCR + 待办提醒(C# / WinForms)
windows·开源·c#·ocr·winforms
小白学大数据6 小时前
拼多多反爬对抗实战:Scrapy 中间件化采集架构解析
开发语言·scrapy·中间件·架构
colinu6 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++