-
Inheritance question
Does anyone know why this code prints out 0 4 3?
class A {
public void m() { }
public A() {
m();
}
}
class B extends A {
private int f = 4;
public void m() {
System.out.println(f);
}
public B() {
m();
f = 3;
m();
}
}
public class Init {
public static void main(String[] args) {
B b = new B();
}
}
-
Its the super class' default constructor that is being
invoked prior to the value declaration of f in the subclass. The superclass' m() method is overridden
by the subclass, so the superclass constructor calls
the subclass' m() method that in turn uses B's class global
variable f in its print statement. This value is
already allocated by the compiler but it has not yet
been assigned the initial value 4, as this assignment procedurally comes after the superclass constructor's invokation.
eschew obfuscation
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
Forum Rules
|
Top DevX Stories
Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL
|
Bookmarks