继承的基础

时间:2014-02-17 11:04:11

标签: inheritance parent-child

考虑一个父类,其中一些变量如a,b,c。如果我从这个父类派生一个子类,那么子类是否知道变量a,b,c ??如果是这样,a,b,c的值在这个子类中也会保持不变吗?

2 个答案:

答案 0 :(得分:2)

OOP语言具有不同的访问级别,可以确定来自类外部和内部的字段(“变量”)的可见性。 大多数OOP语言至少包含以下三种语言:privateprotectedpublic。如果你的基类变量是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)

子类将包含父类变量。

如果子类可以访问它们是另一回事。变量至少需要具有受保护的可访问性,以便子类能够访问和/或使用它们。