CATEGORII DOCUMENTE |
Asp | Autocad | C | Dot net | Excel | Fox pro | Html | Java |
Linux | Mathcad | Photoshop | Php | Sql | Visual studio | Windows | Xml |
Since there are now two classes involved - the base class and the derived class - instead of just one, it can be a bit confusing to try to imagine the resulting object produced by a derived class. From the outside, it looks like the new class has the same interface as the base class and maybe some additional methods and fields. But inheritance doesn't just copy the interface of the base class. When you create an object of the derived class, it contains within it a subobject of the base class. This subobject is the same as if you had created an object of the base class by itself. It's just that, from the outside, the subobject of the base class is wrapped within the derived-class object.
Of course, it's essential that the base-class subobject be initialized correctly and there's only one way to guarantee that: perform the initialization in the constructor, by calling the base-class constructor, which has all the appropriate knowledge and privileges to perform the base-class initialization. Java automatically inserts calls to the base-class constructor in the derived-class constructor. The following example shows this working with three levels of inheritance:
//: Cartoon.java
// Constructor calls during inheritance
class Art
class Drawing extends Art
public class Cartoon extends Drawing
public static void main(String[] args)
The output for this program shows the automatic calls:
Art constructor
Drawing constructor
Cartoon constructor
You can see that the construction happens from the base "outward," so the base class is initialized before the derived-class constructors can access it.
Even if you don't create a constructor for Cartoon( ), the compiler will synthesize a default constructor for you that calls the base class constructor.
The above example has default constructors; that is, they don't have any arguments. It's easy for the compiler to call these because there's no question about what arguments to pass. If your class doesn't have default arguments or if you want to call a base-class constructor that has an argument you must explicitly write the calls to the base-class constructor using the super keyword and the appropriate argument list:
//: Chess.java
// Inheritance, constructors and arguments
class Game
class BoardGame extends Game
public class Chess extends BoardGame
public static void main(String[] args)
If you don't call the base-class constructor in BoardGame( ), the compiler will complain that it can't find a constructor of the form Game( ). In addition, the call to the base-class constructor must be the first thing you do in the derived-class constructor. (The compiler will remind you if you get it wrong.)
As just noted, the compiler forces you to place the base-class constructor call first in the body of the derived-class constructor. This means nothing else can appear before it. As you'll see in Chapter 9, this also prevents a derived-class constructor from catching any exceptions that come from a base class. This can be inconvenient at times.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 860
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved