I dug up this interesting link : basically it says that cyclic inheritance is valid if there are no duplicate fields, since the search for any field just needs to go through one cycle of the cycle to find out the meaning. If the field is repeated, then neither of the two definitions is more reliable than the other, and there will probably be a problem.
Suppose you want to define a person as a person and as a voter, and set different attributes for each. In pseudo code:
class Person extends Human: String name; class Human extends Voter: String language; class Voter extends Person: Country residence;
Now you can address various aspects of the personality without having to define a hierarchy, and you can create different people as a Person (with a name), a Person (who speaks a language), or a Voter (in a specific country). No aspect is more important than other.
Although interesting, I do not think it is practical to use outside of research projects. Imagine that for all classes that pass parameters to super () constructors, it would be easy to spoil the whole construct.
Update: this pseudo code does not compile when switching to Java 8 and, apparently, to any language (except Cecil, as shown by the link above). No one seems to have found any valid uses, and therefore has forbidden cyclic inheritance. This does not mean that the concept is inherently impossible; that practical use does not justify efforts to implement a special case.
source share