公有继承(public inheritance)
继承之后,基类成员保持自己的访问级别:基类的publice成员为派生类的public成员,基类的protected成员为派生类的protected成员,基类的private成员在派生类的private成员,但是却在派生类中不可见,也即不能操作,但是存在。
受保护继承(protected inheritance)
继承之后,基类的publice成员和protected成员为派生类的protected成员,基类的private成员在派生类的private成员,但是却在派生类中不可见,也即不能操作,但是存在。
私有继承(private inheritance)
继承之后,基类的所有成员在派生类中为private属性,其中基类的private成员在派生类中不可见,也即不能操作,但是存在。
上面一段解释,可能还是叫很多人觉得很迷糊,特别是private成员的继承。
可见性也就是可操作性的意思,不可见(即不能操作)时并不能说明它就不存在,它还是占据一定内存空间的,是真实存在的。如果大家想确认一下,不妨比较一下基类对象和派生类对象所分别占据的内存空间即可。
翻看相关参考书籍,关于private限制的成员变量是这样写的:
private 只允许来自改类内部的方法访问.不允许任何来自该类外部的访问.
实际上,private,public,protected和继承没有关系,他们对成员函数和变量的限制只是在成员的可见性上。
public允许来自任何类的访问;
private只允许来自改类内部的方法访问,不允许任何来自该类外部的访问;
protected允许来自同一包中的任何类以及改类的任何地方的任何子类的方法访问.
而关于成员变量的继承,父类的任何成员变量都是会被子类继承下去的,私有的objects就是明证,这些继承下来的私有成员虽对子类来说不可见,但子类仍然可以用父类的函数操作他们.
这样的设计有何意义呢?我们可以用这个方法将我们的成员保护得更好,让子类的设计者也只能通过父类指定的方法修改父类的私有成员,这样将能把类保护得更好,这对一个完整的继承体系是尤为可贵的. jdk源码就有这样的例子,java.util.Observable就是这样设计的.
阅读(4980) | 评论(0) | 转发(0) |