1/22
Looks like no tags are added yet.
Name | Mastery | Learn | Test | Matching | Spaced |
---|
No study sessions yet.
In Java all classes can inherit attributes (instance variables) and behaviors (methods) from another class. The class being inherited from is called the parent class or superclass. The class that is inheriting is called the child class or subclass.
When one class inherits from another, we can say that it is the same kind of thing as the parent class (the class it inherits from). For example, a car is a kind of vehicle. This is sometimes called the is-a relationship, but more accurately it’s a is-a kind of relationship. A motorcycle is another kind of vehicle. All vehicles have a make, model, and year that they were created. All vehicles can go forward, backward, turn left and turn right.
A UML (Unified Modeling Language) class diagram shows classes and the relationships between the classes as seen in Figure 1. An open triangle points to the parent class. The parent class for Car and Motorcycle is Vehicle. The Vehicle class has two child classes or subclasses: Car and Motorcycle.
To make a subclass inherit from a superclass, use the Java keyword extends with the superclass name when creating a new subclass as shown below.
**public** **class** **Car** **extends** Vehicle **public** **class** **Motorcycle** **extends** Vehicle
While a person can have two parents, a Java class can only inherit from one parent class. If you leave off the extends keyword when you declare a class then the class will inherit from the Object class that is already defined in Java.
Inheritance allows you to reuse data and behavior from the parent class. If you notice that several classes share the same data and/or behavior, you can pull that out into a parent class. This is called generalization. For example, Customers and Employees are both people so it makes sense use the general Person class as seen below.
Inheritance is also useful for specialization which is when you want most of the behavior of a parent class, but want to do at least one thing differently and/or add more data. The example below can also be seen as specialization. An employee is a person but also has a unique id. A customer is a person, but also has a credit card.
If no parent class is specified using the extends keyword, the current class will still have a parent class.
If no parent class is specified using the extends keyword, the parent class will be Object.
✔ All classes in Java have one and only one parent class.
Another type of relationship between classes is the has-a relationship or association relationship. Use this when the object of one class contains a reference to one or more of another class. For example, a course can have many course periods associated with it as shown below. The 1 near the Course means that 1 course object is associated with the number shown near the other class. In this case it is * which means 0 to many. So one course is associated with 0 to many course periods.
In the code, the Course
class has an array or ArrayList of CoursePeriod
objects as an attribute inside it.
**public** **class** **Course**{ **private** ArrayList<CoursePeriod> periodList; }
Alternatively, we could say that a CoursePeriod has a Course attribute inside it to hold the information about the Course. It is up to the programmer how to design these two classes depending on which type of association would be more useful in the program.
**public** **class** **CoursePeriod**{ **private** Course courseInfo; **private** int period; }
Here is another example. Consider the classes Student, Course, and APcourse. An APcourse is a special type of Course. Students are in Courses. What are the relationships between these classes? The UML diagram below shows the inherits (is-a) relationship between Course and APcourse and the associate (has-a) relationship between Course and Students.
instanceof
in Java checks whether an object is an instance of a specific class or subclass.
Example:
if (obj instanceof Dog) {
System.out.println("It's a Dog!");
}
It returns true
if obj
is a Dog
(or a subclass of Dog
), otherwise false
.
If you aren’t sure if a class should inherit from another class ask yourself if you can substitute the subclass type for the superclass type. For example, if you have a Book class and it has a subclass of ComicBook does that make sense? Is a comic book a kind of book? Yes, a comic book is a kind of book so inheritance makes sense. If it doesn’t make sense use association or the has-a relationship instead.
Only use inheritance when the child class is really a type of the parent class, otherwise use association.
IS-A Relationship
Represents inheritance (extends
or implements
)
Means one class is a type of another class.
Example:
class Animal { } class Dog extends Animal { } // Dog IS-A Animal
HAS-A Relationship
Represents composition (one class contains another as a field)
Means one class has a reference to another class.
Example:
class Engine { } class Car { Engine engine; // Car HAS-A Engine }
In short:
IS-A → Inheritance
HAS-A → Composition
A class hierarchy can be developed by putting common attributes and behaviors of related classes into a single class called a superclass.
Classes that extend a superclass, called subclasses, can draw upon the existing attributes and behaviors of the superclass without repeating these in the code.
The keyword extends is used to establish an inheritance relationship between a subclass and a superclass. A class can extend only one superclass.
Extending a subclass from a superclass creates an is-a relationship from the subclass to the superclass.