inheritance

Post on 30-Dec-2015

17 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Inheritance. INHERITANCE: extending classes by adding or redefining methods, and adding instance fields Suppose we have a class Vehicle : public class Vehicle{ private String make; private String model; - PowerPoint PPT Presentation

TRANSCRIPT

Inheritance• INHERITANCE: extending classes by adding or redefining

methods, and adding instance fields

Suppose we have a class Vehicle:

public class Vehicle{ private String make; private String model; private int year; private double mileage; public Vehicle(String mk, String mdl, int yr, double mpg)

{ make = mk; model = mdl; year = yr; mileage = mpg; }

//class Vehicle continued

public void setMake(String nmake) { make = nmake; } public void setModel(String nmodel) { model = nmodel; } public void setYear(int nyear) { year = nyear; } public void setMileage(double mpg) { mileage = mpg; }

//class Vehicle continued

public String getMake() { return make; } public String getModel() { return model; } public int getYear() { return year; } public String getMileage() { return mileage; } public String toString() { return make + “ “ + model+ “, Year: “ + year; }}

And now we wanted a class Car. A car certainly needs all the data and methods we saw in the existing Vehicle class … plus more

public class Car extends Vehicle{

}

before we even write one declaration for class Car …

All public (and protected) data and methods of Vehicle are automatically inherited !!

(object of type Car will have all storage and access behaviors seen in Vehicle)

• Vehicle class = superclass• Car class = subclass

• In general,

class SubclassName extends SuperclassName{       instance fields

methods }

Inheritance and Instance Fields

• Inherited data: All public and protected instance variables from the superclass are automatically inherited

• You can add supply additional instance data in an subclass that doesn’t exist in superclass

• Do not reuse instance data name in

subclass (will hide super class data)

The class Car has inherited all instance data from the class Vehicle, but

will need instance data of it’s own:

public class Car extends Vehicle{

// data

private boolean convertible;

private double trunksize;

// Car methods

…………..

}

The class Car has inherited all methods from the class Vehicle, but

will need methods of it’s own:

public class Car extends Vehicle{

// data

……..

// Car constructor

public Car (String mk, String md, int yr, double mpg, boolean

convert, double trusize){

super (mk,md,yr,mpg); //these locations are PRIVATE!!

convertible = convert;

trunksize = trusize;

}

** call to superclass constructor MUST be first statement !!

//get and set

public void setConvert(boolean conv){ convertible = conv; } public boolean getConvert() { return convertible; } //calculate distance that can currently be traveled public double distance (double gallons) { return gallons * getMileage(); //use superclass method to access // private data }

//OVERRIDE the toString method public String toString() { return year + “ “ + model + “ trunk cap: “ + trunksize; }

Inherited Field Access• we need to use constructor or set

methods to change contents of instance

data in Vehicle

• We need to use get methods to access

data in data fields inherited from Vehicle

** This is because instance data in Vehicle

was all declared as Private

Inheritance and Methods

• Override method: Supply a different implementation of a method that exists in the superclass

• Inherit method: Don't supply a new implementation of a method that exists in the superclass

• Add method: Supply a new method that doesn't exist in the superclass

Invoking a Superclass Method

• Subclass can directly call any public method (as we called getMileage above)

*If subclass method has the same signature as a superclass method (say xxx)

xxx() call within subclass calls subclass method

super.xxx() call within subclass calls superclass method

Suppose we also need a class Truck :

public class Truck extends Vehicle{

private double bedsize;

private boolean towpackage;

public Truck (String mk, String md, int yr, double mpg, boolean

tow, double bsize){

super (mk,md,yr,mpg); //these locations are PRIVATE!!

bedsize = bsize;

towpackage = tow;;

}

//same concepts apply to Truck class as seen in Car class

//get and set

public void setTowPackage(boolean tow){

towpackage = tow;

}

public boolean getTowPackage() {

return towpackage;

}

//calculate how many of an item that can currently be carried

public double quantity (int sizeofone) {

return bedsize / sizeofone;

}

}

Class Usage//can create and assign to same type referenceVehicle v1 = new Vehicle(“ford”,“mustang”,1966, 28.5);Car c1 = new Car(“vw”,”rabbit”, 1978, 35.2);

//a subclass is the superclass type, but not vice versaVehicle v2 = new Car(“cadillac”,”seville”, 1988, 16.0);Vehicle v3 = new Truck(“MAC”,”pickup”, 1968, 16.0);Car c2 = new Vehicle(“gmc”,”yukon”,122, 13.5); //error

//public superclass methods can be called by subclass object v1.setMake(“Mercury”); c1.setMake(“Toyota”); v2.setMake(“Nissan”);

Class Usage cont.

//public subclass methods cannot ALWAYS be called by super object

vN.setConv(true); // only makes sense if vN is a Car

//object, so compiler will object

Car temp = (Car) vN;temp.setConv(true); //must cast to get by compiler

if vN is NOT a Car the attempt to cast will throw a ClassCastException……..

use instanceof operator to check !!!!!!!

Class Usage cont.

//subclass object ARE of superclass type (but not vice versa)

Vehicle[] list = new Vehicle[10];

list[0] = c1; list[1] = t1; list[2] = v1;

for (int i=0; i<2; i++) System.out.println(list[i]);

WHICH toSTRING will be used??? (polymorphism again)

Access Control Level • public - access provides to all classes Recommended way to work with objects == by calling their public methods • private - access is restricted to inside the class Class instance variables should be kept private, ensuring their integrity and enforcing encapsulation model of object oriented programming

• protected -accessible by subclasses and package This is not recommended (except for efficiency purposes). As repeated inheritance occurs, access propagates and the

benefits of information hiding is lost • package access (the default, no modifier) Appropriate for package of classes which share data.

Inheritance Hierarchies

• Hierarchies of classes, subclasses, and sub-subclasses are common

• Example: Swing hierarchy

• Superclass JComponent has methods getWidth, getHeight

• AbstractButton class has methods to set/get button text and icon

A Part of the Hierarchy of Swing UI Components

top related