Abstract classes are used to organize the "concept" of something that has several different versions in the children. An abstract class can include abstract methods and non-abstract methods.
Here is a class definition for class Holiday
.
It is a non-abstract child of an abstract parent:
class Holiday extends Card { public Holiday( String r ) { recipient = r; // recipient in Card is protected, so this works } public void greeting() { System.out.println("Dear " + recipient + ","); System.out.println("Season's Greetings!\n"); } }
The class Holiday
is not an abstract class.
Objects can be instantiated from it.
Its constructor implicitly calls the no-argument
constructor in its parent, Card
,
which calls the constructor in Object
.
So even though it has an abstract parent,
a Holiday
object is just as much an object as any other.
Holiday
inherites the abstract method greeting()
from its parent.Holiday
must define a greeting()
method that includes
a method body (statements between braces).greeting()
must match the signature given in the
parent.Holiday
did not define greeting()
, then Holiday
must be declared to be an abstract class.
Will each class that inherits from Card
have
a greeting()
method?