If it's not related to any of those, it won't be on the final.
public class DataSet // Modified for BankAccount objects { private double sum; private BankAccount maximum; private int count; . . . public void add(BankAccount x) { sum = sum + x.getBalance(); if (count == 0 || maximum.getBalance() < x.getBalance()) maximum = x; count++; } public BankAccount getMaximum() { return maximum; } }
Or suppose we wanted to find the coin with the highest value among a set of coins. We would need to modify the DataSet class again:
public class DataSet // Modified for Coin objects { private double sum; private Coin maximum; private int count; . . . public void add(Coin x) { sum = sum + x.getValue(); if (count == 0 || maximum.getValue() < x.getValue()) maximum = x; count++; } public Coin getMaximum() { return maximum; } }
sum = sum + x.getMeasure(); if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; count++;
public interface Measurable { double getMeasure(); }
An interface type is similar to a class, but there are several important differences:
public class DataSet { private double sum; private Measurable maximum; private int count; . . . public void add(Measurable x) { sum = sum + x.getMeasure(); if (count == 0 || maximum.getMeasure() < x.getMeasure()) maximum = x; count++; } public Measurable getMaximum() { return maximum; } }
public class BankAccount implements Measurable { ... public double getMeasure() { return balance; } }
public class Coin implements Measurable { public double getMeasure() { return value; } . . . }
stereotypeindicator «interface»
is-arelationship between a class and an interface
usesrelationship or dependency
Program Run:
Average balance: 4000.0 Expected: 4000 Highest balance: 10000.0 Expected: 10000 Average coin value: 0.13333333333333333 Expected: 0.133 Highest coin value: 0.25 Expected: 0.25
Why can't the add method of the DataSet class have a parameter of type Object?
Object
is a class, not an interfaceObject
does not have a getMeasure
methodBankAccount
doesn't implement
Object
Object
does not have a getBalance
methodSuppose you want to use the DataSet class to find the Country object with the largest population. What condition must the Country class fulfill?
Object
interfaceMeasurable
interfacegetMeasure
method that returns the
country's populationBankAccount account = new BankAccount(10000); Measurable meas = account; // OK
Coin dime = new Coin(0.1, "dime"); Measurable meas = dime; // Also OK
Measurable meas = new Rectangle(5, 10, 20, 30); // ERROR
Because Rectangle doesn't implement Measurable
DataSet coinData = new DataSet(); coinData.add(new Coin(0.25, "quarter")); coinData.add(new Coin(0.1, "dime")); coinData.add(new Coin(0.05, "nickel")); Measurable max = coinData.getMaximum(); // Get the largest coin
String name = max.getName(); // ERROR
Coin maxCoin = (Coin) max;
String name = maxCoin.getName();
Given the code
BankAccount acct = new BankAccount(); Coin dime = new Coin("dime", 0.1); Measurable meas = new Coin("quarter", 0.25);
which of the following statements are correct?
acct = (BankAccount) meas;
dime = (Coin) meas;
acct = meas;
dime = meas;
Measurable meas; meas = new BankAccount(10000); meas = new Coin(0.1, "dime");
Note that the object to which meas refers doesn't have type Measurable; the type of the object is some class that implements the Measurable interface
double m = meas.getMeasure();