This week's book giveaway is in the JavaFX forum.
We're giving away four copies of Introducing JavaFX 8 Programming and have Herbert Schildt on-line!
See this thread for details.
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

Win a copy of Introducing JavaFX 8 Programming this week in the JavaFX forum!
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: 14991

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.
    It's not a secret anymore!