gpt4 book ai didi

oop - 为什么父类无法访问子类成员

转载 作者:行者123 更新时间:2023-12-01 02:03:07 25 4
gpt4 key购买 nike

如果我们按照下面的代码

class A;
int a = 10;
endclass

class B extends A;
int b = 20;
endclass

program test;
A a1;
B b1;
initial begin
b1 = new();
a1 = b1; //child class object is assigned to parent class handle
$display("Value of variable b is %x", a1.b);
end
endprogram

然后上面的代码导致错误“在类'A'中找不到成员'b'”
现在我的观察是,当扩展类对象分配给基类句柄时,模拟器将检查句柄的类型并检查该类中是否存在变量。由于变量 b 未在基类中定义,因此将导致错误。
所以我想确认一下我上面的观察是正确的还是错误的?
如果有人想在我的观察中添加一些东西,我会很欢迎,以防它是正确的。

谢谢

最佳答案

你是对的,这是我所知道的 OOP 语言的预期行为(我不是特别了解你正在使用的语言,但你的例子很简单)。能够使用由子类声明的变量将导致违反 polymorphism 的面向对象原则。 (或子类型)。

我会用 Java 回答你,因为对于我要给出的示例,我确信这种语言的语法。想象两个具有相同声明类型的变量:

public A buildA () {
return new B();
}
public static void main () {
A a1 = new A();
A b1 = buildA();
}

多态性原理是 a1b1应该实现相同的接口(interface)并无差别地使用。如果允许我访问变量的成员 b ,由于编译器无法猜测哪个是基础,哪个是子级,因此每次我访问具体的 A 时,它都会允许程序在运行时崩溃,删除安全网类型应该提供。

关于oop - 为什么父类无法访问子类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34529759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com