๋คํ์ฑ
์ฌ๋ฌ๊ฐ์ง ํ์ ์ ํ๊ฐ์ง ํ์ ์ผ๋ก ์ฒ๋ฆฌ ํ ์ ์๋ ๊ธฐ์ (์์ ๊ด๊ณ์ ์ด์ฉ)
๋ถ๋ชจ ํด๋์ค์ ์ฐธ์กฐ ๋ณ์๋ก ์์ ํด๋์ค์ ๊ฐ์ฒด(์ธ์คํด์ค)๋ฅผ ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ
๋จ, ๋ถ๋ชจ ํด๋์ค๊ฐ ์๊ณ ์๋ ๋ฉ์๋๊ฐ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ด ์๋ ๊ฒฝ์ฐ์ ํด๋น!!!
Parent
public class Parent {
protected int num;
public void display() {
System.out.println("๋ถ๋ชจ ํด๋์ค ๋ฉ์๋");
}
}
Child
public class Child extends Parent {
private int x = 100;
public Child() {}
public void out() {
System.out.println("๋ถ๋ชจ์ protected num ํ๋ : " + num);
System.out.println("์์ ํด๋์ค ๋ฉ์๋");
}
@Override
public void display() {
System.out.println("์์ ๋ฐ์ ์ฌ์ ์ํ ๋ฉ์๋");
}
}
Main
public class PolyEx1 {
public static void main(String[] args) {
Child child = new Child(); // Child ํด๋์ค์ ์ฐธ์กฐ ๋ณ์(child)๋ก Child ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
child.display();
child.out();
Parent parent = new Child(); // ๋ถ๋ชจ ํด๋์ค์ ์ ์กฐ๋ณ์๋ก ์์ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐ
parent.display();
}
}
๋งค๊ฐ๋ณ์์ ๋คํ์ฑ
๋ฉ์๋๋ฅผ ํธ์ถํ ๋์๋ ์ผ๋ฐ์ ์ผ๋ก ๋งค๊ฐ๋ณ์์ ํ์ ๊ณผ ๋์ผํ ๋งค๊ฐ๊ฐ์ ์ง์ ํ์ง๋ง,
์์๊ด๊ณ๋ฅผ ์ด์ฉํด ๋งค๊ฐ๋ณ์์ ์์ ํ์ ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์.
๋งค๊ฐ๋ณ์์ ๋คํ์ฑ์ ์ด์ฉํ๋ฉด ํ์ํ ์์ ์ ํ์ํ ๊ฐ์ฒด๋ฅผ ๋ฉ์๋์ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌ ํ ์ ์์.
์์ 1
public class PolyBuyer {
public static void main(String[] args) {
Buyer buyer = new Buyer(); // ๊ตฌ๋งค๋ฅผ ํ๋ ๊ฐ์ฒด ์์ฑ
TV tv = new TV();
Audio audio = new Audio();
Computer computer = new Computer();
buyer.buy(tv);
buyer.buy(audio);
buyer.buy(computer);
buyer.viewInfo();
}
}
์ ํ๋ค(tv,computer ...)์ Product ํด๋์ค์ ์์ ํด๋์ค ์ด๊ธฐ ๋๋ฌธ์ buy ๋ฉ์๋์ ์ด๋ค ์ ํ์ด ๋ค์ด์ค๋ ์๊ด ์์.
๋ค๋ฅธ ์ ํ๋ค์ด ์ถ๊ฐ๋๋ค ํ๋ค buy ๋ด๋ถ ๋ฉ์๋๋ ๊ฑด๋๋ฆฌ์ง ์์๋ ๋จ.
์ด์ฐจํผ ๋ถ๋ชจ ํด๋์ค(Product) ์ฐธ์กฐ ๋ณ์๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ๊ธฐ ๋๋ฌธ
์ด๋ ๊ฐ์ฒด๊ฐ ๋์จํ ๊ด๊ณ๋ฅผ ๋ง๋๋ ํต์ฌ์ด ๋จ.
public class Product {
int price;
int bonusPoint;
}
class TV extends Product {
TV() {
this.price = 100; // ์์๋ฐ์ ํ๋์ ๊ฐ์ ์ด๊ธฐํ
this.bonusPoint = 10;
}
}
class Audio extends Product {
Audio() {
this.price = 120;
this.bonusPoint = 12;
}
}
class Computer extends Product {
Computer() {
this.price = 200;
this.bonusPoint = 20;
}
}
class Buyer {
int money = 1000;
int bonusPoint = 0;
void buy(Product p) { // โ
โ
๊ฐ ์ ํ์ ๋ํ ๋ถ๋ชจ ํด๋์ค ํ์
์ ๋ณ์
money -= p.price; // ์ ํ ๊ตฌ๋งค์ ์ ํ ๊ธ์ก ๋งํผ์ ๋์ ์ง๋ถํ๋ ์ฝ๋
bonusPoint += p.bonusPoint; // ์ ํ ๊ตฌ๋งค์ ํด๋น ํฌ์ธํธ๋ฅผ ๋์ ํ๋ ์ฝ๋
}
void viewInfo() {
System.out.println("์์ก : " + money);
System.out.println("ํฌ์ธํธ : " + bonusPoint);
}
}
<์ถ๋ ฅํ๋ฉด>
์์ก : 580
ํฌ์ธํธ : 42
์์ 2
Driver
public class Driver {
String name; // ์ด์ ์ ์ด๋ฆ
public Driver(String name) {
this.name = name;
}
public void drive(Vehicle vehicle) {
System.out.print(name + "์ ");
vehicle.run();
}
}
Vehicle
public class Vehicle {
public void run() {
System.out.println("์๋์ฐจ๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
class SportsCar extends Vehicle {
@Override
public void run() {
System.out.println("์คํฌ์ธ ์นด๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
class Bus extends Vehicle {
@Override
public void run() {
System.out.println("๋ฒ์ค๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
class Taxi extends Vehicle {
@Override
public void run() {
System.out.println("ํ์๊ฐ ๋ฌ๋ฆฝ๋๋ค.");
}
}
Main
import java.util.Scanner;
public class PolyCar {
public static void main(String[] args) {
Driver driver = new Driver("ํ๊ธธ๋");
SportsCar sportsCar = new SportsCar();
Bus bus = new Bus();
Taxi taxi = new Taxi();
Scanner sc = new Scanner(System.in);
System.out.print("์ด์ ํ๊ณ ์ถ์ ์ฐจ๋ฅผ ์ ํ ํ์ธ์. [1]์คํฌ์ธ ์นด [2]๋ฒ์ค [3]ํ์ : ");
int selCar = sc.nextInt();
switch (selCar) {
case 1 : driver.drive(sportsCar); break;
case 2 : driver.drive(bus); break;
case 3 : driver.drive(taxi); break;
}
}
}