子类也可以是超类吗?

Can a subclass also be a superclass?

子类也可以是 Java 中另一个子类的超类吗?也许这不是最好的例子,但请考虑以下 类:

public class Animal { }
public class Dog extends Animal { } 
public class Cat extends Animal { } 
public class Siamese extends Cat { }
public class JackRussel extends Dog { }

继承是否允许这种行为?

鉴于 JackRussels 需要 Animal 和 Dog 的方法和属性,而 Siamese 需要 Animal 和 Cat 的方法和属性。

如果没有,是否有一种通用的方法可以实现这种行为?

干杯

当然可以。但是说 Siamese 需要来自两个 superclasses 的方法和字段有点不对。当 cat extends animal 时,它会获得 animal 的所有字段和方法(如果你不覆盖它们)。然后,当 Siamese 扩展那只猫 class 时,它会自动获得整个猫 class,包括来自动物 class 的东西,无论它们是否被覆盖。

简而言之,这是可能的。

是的,这种行为正是在 Java 中使用继承时所期望的。 这里有一些您可能会发现有用的快速阅读:http://www.homeandlearn.co.uk/java/java_inheritance.html

您的 JackRussel 对象将从它的 Animal 和 Dog super-类 继承所有字段和方法,它们是:

  • 未声明为私有;
  • 未被覆盖(在这种情况下将只能访问 被覆盖的);
  • 未隐藏(在这种情况下将只能访问 隐藏的 一个);

这是另一个关于 Java 中的阴影和覆盖的快速 link: http://docstore.mik.ua/orelly/java-ent/jnut/ch03_04.htm

考虑到这些点,您可以轻松设计继承树,将父项的行为和状态传播到其所有子项。

谢谢。