考虑一个带有一些变量的父类a,b,c。如果我从这个父类派生一个子类,子类是否知道变量a,b,c?如果是这样,a,b,c的值是否在这个子类中保持不变?继承的基础知识
继承的基础知识
回答
子类将包含父类变量。
如果子类可以访问它们是另一回事。变量需要至少有一个受保护的可访问性,以便子类能够访问和/或使用它们。
如果将这些变量声明为私有? –
您不能从子类访问它们,只能从父类中访问它们。您可以在父类中创建一个公用函数来设置专用字段。 – martijn
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();
}
}
这些变量的值会在子类中保持不变吗? –
我明白你在做什么,但问题不明智。子类没有变量的另一个副本:它扩展了基类,这意味着它继承了它的所有变量和函数,但是如果实例化它,则不会获得Base类的实例和Base + Derived类的实例, 或类似的东西。 – CompuChip
- 1. Python中的继承基础知识
- 2. C++,关于继承的基础知识
- 3. 继承和子类基础知识
- 4. 继承基础
- 5. PHP变量,类和继承了解基础知识
- 6. Ruby基础知识
- 7. Makefile基础知识
- 8. MPI基础知识
- 9. SceneKit基础知识
- 10. Appengine基础知识
- 11. AOP基础知识
- 12. Sitecore基础知识
- 13. Feedburner基础知识
- 14. jstree基础知识
- 15. Angulartics2基础知识
- 16. C++基础知识
- 17. sqlite基础知识
- 18. Threading基础知识
- 19. 基础SQL知识?
- 20. innerHTML基础知识
- 21. Modernizr基础知识
- 22. CS基础知识
- 23. Swift基础知识“!” &“?”
- 24. Odoo - 继承基础模块
- 25. CakePHP:Containable的基础知识
- 26. Matlab的类基础知识
- 27. backbone.js的基础知识
- 28. Hector&Cassandra的基础知识
- 29. Ada的T'Class基础知识
- 30. Javascript dom 2基础知识
请重新考虑您的问题,或者至少发布您的代码,如果可能的话。 – Ademar