考虑一个父类,其中一些变量如a,b,c。如果我从这个父类派生一个子类,那么子类是否知道变量a,b,c ??如果是这样,a,b,c的值在这个子类中也会保持不变吗?
答案 0 :(得分:2)
OOP语言具有不同的访问级别,可以确定来自类外部和内部的字段(“变量”)的可见性。
大多数OOP语言至少包含以下三种语言:private
,protected
和public
。如果你的基类变量是private
,派生类看不到它们,如果它们是protected
它们可以(但非派生类不能),如果它们是public
,每个人都可以看到它们 - 派生和非相关的课程。
当然,基类中的方法总是访问基类中的私有变量 - 即使派生类中新添加的方法无法看到它们。这是C ++中的一个示例(其他OOP语言具有类似的语法)。
class Base {
private:
int a;
protected:
int b;
public:
int f() { a = 1; return a + b; }
}
class Derived : public Base {
public:
int g() {
// You cannot access a here, so this is illegal:
a = 2;
// You can access b here, so this is legal:
b = 2;
// Base::f, or parent::f() in Java, can access a, so this will return 1 + 2 = 3.
return Base::f();
}
}
class NonRelated {
void h() {
Derived d; // Create a derived object
// Both of these are illegal since neither a nor b is public:
d.a = 3;
d.b = 4;
// You *can* call both f() and g(), because they are both public.
// This will return 3.
// (Side note: in actual C++, calling d.f() would not be a good idea since a is not initialized).
d.g();
}
}
答案 1 :(得分:0)
子类将包含父类变量。
如果子类可以访问它们是另一回事。变量至少需要具有受保护的可访问性,以便子类能够访问和/或使用它们。