Composition is another component of OOP programming. It is very useful for day and day programming. Composition is has
relationship.
- The Resolution class is a part of Monitor the Monitor has resolution// The Dimensions class is a part of Case the Case class has dimension.
- The Case and Monitor are a part of the PC the PC class has case and monitor.
- if you use inheritance, Java only has inherited class only one time.
package anote;
class PC {
private Case theCase;
private Monitor monitor;
private Motherboard motherboard;
public PC(Case theCase, Monitor monitor, Motherboard motherboard) {
this.theCase = theCase;
this.monitor = monitor;
this.motherboard = motherboard;
}
public Case getTheCase() {
return this.theCase;
}
public Monitor getMonitor() {
return this.monitor;
}
public Motherboard getMotherboard() {
return this.motherboard;
}
}
class Case {
private String model;
private String manufacturer;
private String powerSupply;
private Dimensions dimensions;
public Case(String model, String manufacturer, String powerSupply, Dimensions dimensions) {
this.model = model;
this.manufacturer = manufacturer;
this.powerSupply = powerSupply;
this.dimensions = dimensions;
}
public void pressPowerButton() {
System.out.println("Power button pressed");
}
public String getModel() {
return this.model;
}
public String getManufacturer() {
return this.manufacturer;
}
public String getPowerSupply() {
return this.powerSupply;
}
public Dimensions getDimensions() {
return this.dimensions;
}
}
class Dimensions {
private int width;
private int height;
private int depth;
public Dimensions(int width, int height, int depth) {
this.width = width;
this.height = height;
this.depth = depth;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
public int getDepth() {
return depth;
}
}
class Monitor {
private String model;
private String manufacturer;
private int size;
private Resolution nativeResolution;
public Monitor(String model, String manufacturer, int size, Resolution nativeResolution) {
this.model = model;
this.manufacturer = manufacturer;
this.size = size;
this.nativeResolution = nativeResolution;
}
public void drawPixelAt(int x, int y, String color) {
System.out.print("Drawing pixel at " + x + "," + y + "in colour" + color);
}
public String getModel() {
return model;
}
public String getManufacturer() {
return manufacturer;
}
public int getSize() {
return size;
}
public Resolution getNativeResolution() {
return nativeResolution;
}
}
class Resolution {
private int width;
private int height;
public Resolution(int width, int height) {
this.width = width;
this.height = height;
}
public int getWidth() {
return width;
}
public int getHeight() {
return height;
}
}
class Motherboard {
private String model;
private String manufacturer;
private int ramSlots;
private int cardSlots;
private String bios;
public Motherboard(String model, String manufacturer, int ramSlots, int cardSlots, String bios) {
this.model = model;
this.manufacturer = manufacturer;
this.ramSlots = ramSlots;
this.cardSlots = cardSlots;
this.bios = bios;
}
public void loadProgram(String programName) {
System.out.println("Program " + programName + "is now loading...");
}
public String getModel() {
return model;
}
public String getManufacturer() {
return manufacturer;
}
public int getRamSlots() {
return ramSlots;
}
public int getCardSlot() {
return cardSlots;
}
}
public class Main {
public static void main(String[] args) {
Dimensions dimensions = new Dimensions(50, 50, 30);
Case theCase = new Case("220B", "Samsung", "220", dimensions);
Monitor monitor = new Monitor("55inch", "LG", 27, new Resolution(1680, 1050));
Motherboard motherboard = new Motherboard("ZI70C-Gaming 7", "Gigabyte", 4, 6, "F7");
PC pc = new PC(theCase, monitor, motherboard);
pc.getMonitor().drawPixelAt(1500, 1200, "red");
pc.getMotherboard().loadProgram("Mac OS");
pc.getTheCase().pressPowerButton();
}
}