File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
The moose likes Beginning Java and the fly likes Basic Question. Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Java » Beginning Java
Bookmark "Basic Question." Watch "Basic Question." New topic

Basic Question.

Suresh Rajadurai
Ranch Hand

Joined: Feb 22, 2007
Posts: 58

The following question was in a mock paper. Could you please tell me why it is ending in compilation error? The error says: 5: cannot find symbol
symbol : constructor TestSuper()
location: class TestSuper
class TestSub extends TestSuper{ }

class TestSuper
TestSuper(int i) { }
class TestSub extends TestSuper{ }
class TestAll
public static void main (String [] args)
new TestSub();
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 15080

This question has to do with the following rule.

Java Language Specification section 8.8.9:
If a class contains no constructor declarations, then a default constructor that takes no parameters is automatically provided:
  • If the class being declared is the primordial class Object, then the default constructor has an empty body.
  • Otherwise, the default constructor takes no parameters and simply invokes the superclass constructor with no arguments.

  • A compile-time error occurs if a default constructor is provided by the compiler but the superclass does not have an accessible constructor that takes no arguments.

    Now, let's look at your example.

    Your class TestSuper has a constructor that takes an int. The compiler will not automatically add a default constructor to class TestSuper, because there is already a constructor in the class.

    Your class TestSub does not have a constructor declaration. So the compiler will automatically add a default constructor to class TestSub, which will invoke TestSuper's no-args constructor.

    The problem is in that last part: class TestSuper doesn't have a no-args constructor, so you get an an error.
    [ August 19, 2007: Message edited by: Jesper Young ]

    Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 8 API documentation
    Suresh Rajadurai
    Ranch Hand

    Joined: Feb 22, 2007
    Posts: 58
    Hi Jasper,

    Thank you so much. I really got the exact picture of the problem. I appreciate your reply. Thank you once again.

    I agree. Here's the link:
    subject: Basic Question.
    jQuery in Action, 3rd edition