Inheritance 遗传基础

Inheritance 遗传基础,inheritance,parent-child,Inheritance,Parent Child,考虑一个带有一些变量的父类,比如a、b、c。如果我从这个父类派生一个子类,子类会知道变量a、b、c吗??如果是这样,a、b、c的值在这个子类中也会保持不变吗 子类将包含父类变量 如果子类可以访问它们则是另一回事。这些变量需要至少具有受保护的可访问性,以便子类能够访问和/或使用它们 OOP语言具有不同的访问级别,用于确定类内外字段(“变量”)的可见性。 大多数OOP语言至少有以下三种:private、protected和public。如果您的基类变量是private,则派生类看不到它们;如果它们是

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

子类将包含父类变量


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

OOP语言具有不同的访问级别,用于确定类内外字段(“变量”)的可见性。 大多数OOP语言至少有以下三种:
private
protected
public
。如果您的基类变量是
private
,则派生类看不到它们;如果它们是
受保护的
,则它们可以(但非派生类不能);如果它们是
公共的
,则每个人都可以看到它们-派生类和非相关类

当然,基类中的方法总是可以访问基类中的私有变量——即使派生类中新添加的方法看不到它们。下面是C++中的一个例子(其他OOP语言有类似的语法)。
我明白你的意思,但这个问题不明智。子类没有变量的另一个副本:它扩展了基类,这意味着它继承了它的所有变量和函数,但如果实例化它,则不会得到基类的实例和基类+派生类的实例,或者诸如此类。请重新思考您的问题,或者至少在可能的情况下发布一些代码。您不能从子类访问它们,只能从父类中访问它们。您可以在父类中创建一个公共函数来设置private字段。
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(); 
  }
}