子类是否继承父类的超类?以Food、Chicken、Fillet类为例咨询
嘿,这两个问题都是面向对象继承里的基础核心点,我给你讲明白:
问题1:子类是否会继承其父类的超类?
答案是肯定的!这就是继承的传递性特性。举个生活化的例子:你从父母那里继承了他们的东西,而父母又从爷爷奶奶那里继承了一些东西,这些东西其实你也间接拿到了对吧?面向对象里的继承也是这个逻辑——如果类B继承自类A,类C又继承自类B,那类C不仅能拥有类B的所有可继承成员(非私有属性、方法等),还能间接继承类A的可继承内容。
问题2:关于Food、Chicken、Fillet的继承关系
咱们拆成两个小问题来看:
- Fillet类是否继承自Food类?
是的!因为继承具有传递性,Chicken是Food的直接子类,Fillet又继承了Chicken,所以Fillet会间接继承Food的所有可继承成员,完全可以使用Food中定义的非私有方法和属性。 - 将Fillet称为Food类的另一个子类是否正确?
从严格的面向对象术语来讲,这并不准确。"子类"通常特指直接继承某个父类的类——Chicken是Food的直接子类,而Fillet是Food的间接子类(或者叫孙类)。虽然在一些非正式语境下,有人会把所有后代类都笼统叫子类,但从严谨性角度,这么说会混淆"直接继承"和"间接继承"的区别,更准确的说法是Fillet是Food的后代类或间接子类。
内容的提问来源于stack exchange,提问作者Shane Francis
相关产品推荐
相关产品推荐

