<?xml version="1.0" encoding="utf-8"?>
<feed xml:lang="en" xmlns="http://www.w3.org/2005/Atom"><title>Recent changes to 3: super calls recurse infinitely if overridden twice</title><link href="https://sourceforge.net/p/djava/bugs/3/" rel="alternate"/><link href="https://sourceforge.net/p/djava/bugs/3/feed.atom" rel="self"/><id>https://sourceforge.net/p/djava/bugs/3/</id><updated>2003-05-17T11:07:19Z</updated><subtitle>Recent changes to 3: super calls recurse infinitely if overridden twice</subtitle><entry><title>super calls recurse infinitely if overridden twice</title><link href="https://sourceforge.net/p/djava/bugs/3/" rel="alternate"/><published>2003-05-17T11:07:19Z</published><updated>2003-05-17T11:07:19Z</updated><author><name>Anonymous</name><uri>https://sourceforge.net/u/userid-None/</uri></author><id>https://sourceforge.net43e886348f909e97ecc0aedcadfd4fe98797c12f</id><summary type="html">&lt;div class="markdown_content"&gt;&lt;p&gt;Example:&lt;/p&gt;
&lt;p&gt;class A {&lt;br /&gt;
void foo() {&lt;br /&gt;
System.out.println(&amp;amp;quot;in A.foo()&amp;amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
class B extends A {&lt;br /&gt;
void foo() {&lt;br /&gt;
System.out.println(&amp;amp;quot;in B.foo()&amp;amp;quot;);&lt;br /&gt;
super.foo();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
class C extends B {&lt;br /&gt;
void foo() {&lt;br /&gt;
System.out.println(&amp;amp;quot;in C.foo()&amp;amp;quot;);&lt;br /&gt;
super.foo();&lt;br /&gt;
}&lt;br /&gt;
public static void main(String[] args) {&lt;br /&gt;
C obj = new C();&lt;br /&gt;
obj.foo();&lt;br /&gt;
}&lt;br /&gt;
}&lt;/p&gt;
&lt;p&gt;If there is only one level of method overriding, the &lt;br /&gt;
generated 'super$foo' method is sufficient to get the &lt;br /&gt;
correct behavior.  But with two or more levels of &lt;br /&gt;
overriding, as in this example, both the super-class and &lt;br /&gt;
the super-super-class get a 'super$foo' method, and &lt;br /&gt;
there is no way to reach A's method using reflection &lt;br /&gt;
from an instance of C.&lt;/p&gt;
&lt;p&gt;A possible solution might be to generate 'A$super$foo' &lt;br /&gt;
and 'B$super$foo' method names (or something like &lt;br /&gt;
that), though that makes the dependency between &lt;br /&gt;
subclasses and superclasses more fragile.&lt;/p&gt;
&lt;p&gt;-- Dan Jacobs, President&lt;br /&gt;
ModelObjects Group&lt;br /&gt;
djacobs @ modelobjects . com&lt;/p&gt;
&lt;p&gt;(spaces added to avoid email sniffing from robots)&lt;/p&gt;&lt;/div&gt;</summary></entry></feed>