## Inheritance

Related slides on offer

Figure 446. Guess who's inheriting the money Figure 447. Biology and inheritance Figure 448. Duplicate code
 public class Rectangle{ // Center coordinate private double x; ❶ private double y; public void move (double dx, double dy){ ❷ x += dx; y += dy; } private double width, height; ❸ ... } public class Circle { // Center coordinate private double x; ❶ private double y; public void move (double dx, double dy){ ❷ x += dx; y += dy; } private double radius; ❸ ... }
 The center coordinate (x|y) appears both in Rectangle and Circle. The move(...) method is being defined identically both in Rectangle and Circle! width and height only appear in class Rectangle. radius only appears in class Circle.

Figure 449. Idea: Centralize common code
• Create a parent class Shape containing common code portions.

• Relate both Rectangle and Circle to Shape.

Figure 450. Common and specific properties
Common Rectangle and Circle attributes:
double x;
double y;
Rectangle attributes Circle attributes
double width;
double height;
double radius;

Figure 451. Basic shape inheritance
• • Figure 452. Inheritance
• Derived classes inherit state and behaviour.

• Refinement, specialization.

• is-A relationship:

• A rectangle is a shape.

• A circle is a shape.

Figure 453. Implementing Shape hierarchy
 public class Shape { private double x, y; } public class Rectangle extends Shape { private double width; private double height; } public class Circle extends Shape { private double radius; }

Figure 454. Creating instances
final double x = 2, y = 3;
final Shape shape = new Shape(x, y);

final double width = 2, height = 5;
final Rectangle r = new Rectangle(x, y , width, height);

final Circle circle = new Circle(x, y , radius);

Figure 455. Shape constructor
/**
* Creating a shape located at center coordinate.
* @param x The center's x component.
* @param y The center's y component.
*/
public Shape(double x,double y) {
this.x = x;
this.y = y;
}

Figure 456. Creating Rectangle instances
final Rectangle r =
new Rectangle(x, y ❶,
width, height ❷);
 Center coordinate components “belonging” to superclass Shape. width and height “belonging” to class Rectangle.

Solution: Nested constructor call. Coming soon ...

Figure 457. Rectangle constructor
/**
* Creating a rectangle at (x|y) of given width and height.
* @param x Center's x component.
* @param y Center's y component.
* @param width Rectangle's width.
* @param height Rectangle's height.
*/
public Rectangle(double x, double y,
double width, double height) {
super(x, y) ❶;
this.width = width; this.height = height ❷;
}

Passing center coordinate to superclass Shape's constructor.

### Note

This must be the first statement within Rectangle's constructor.

Processing width and h

eight in current Rectangle constructor.