λ€μ€ μΈν°νμ΄μ€μ μμμ΄ λμμ μ μ©λ μλ μλ€.
(μ΄λ‘ μ μΌλ‘ μΈν°νμ΄μ€ μμμ 무νν κ°λ₯, μμμ νλλ§)
- μμ΄μ»¨ μΈν°νμ΄μ€ (ON/OFF, μ¨λ μ€μ )
- μμ¨μ΄μ μΈν°νμ΄μ€
- μ κ·Όμ νμλ
protected
AirCon
public interface AirCon {
int MAX_TEMP = 30;
int MIN_TEMP = 0;
void airConON();
void airConOFF();
void setAirConTemp(int tmp);
}
int MAX_TEMP, int MIN_TEMP
μΈν°νμ΄μ€ ε § νλλ μΈμ€ν΄μ€ νλ X, μΈν°νμ΄μ€ μμO
μμpublic final static
μ΄ μ¨κ²¨μ Έ μμvoid airConON();
μλμΌλ‘ μΆμλ©μλκ° λλ©° μμabstract
μ¨κ²¨μ Έ μμ
AutoDrive
public interface AutoDrive {
void autoDrvieON();
void autoDriveOFF();
}
Car
public class Car {
protected int speed;
protected String color;
protected String year;
public Car() {
this.speed = 150;
this.color = "white";
this.year = "2022";
}
}
protected int speed;
μΈμ€ν΄μ€ νλ, κ°μ²΄ μμprotected
μ κ·Ό μ νμλ λμΌ ν¨ν€μ§ νΉμ μμ κ΄κ³μμ μ κ·Ό κ°λ₯
SportsCar
public class SportsCar extends Car implements AirCon, AutoDrive{
private boolean isAirCon; // ON/OFF
private int setTemp;
private boolean isAutoDrive;
private boolean isTurbo;
public SportsCar(boolean isAirCon, int setTemp, boolean isAutoDrive, int speed, String color,
String year, boolean isTurbo) {
this.isAirCon = isAirCon;
this.setTemp = setTemp;
this.isAutoDrive = isAutoDrive;
this.speed = speed;
this.color = color;
this.year = year;
this.isTurbo = isTurbo;
}
public void viewInfo() {
String airConStr = (isAirCon) ? "ON" : "OFF";
String autoStr = (isAutoDrive) ? "ON" : "OFF";
String turboStr = (isTurbo) ? "ON" : "OFF";
System.out.println("μλ : " + speed);
System.out.println("μμ : " + color);
System.out.println("μ°λ : " + year);
System.out.println("μμ΄μ»¨ : " + airConStr);
System.out.println("μμ¨μ£Όν : " + autoStr);
System.out.println("μ¨λ : " + setTemp);
System.out.println("ν°λ³΄λͺ¨λ : " + isTurbo);
}
@Override
public void airConON() {
System.out.println("μμ΄μ»¨μ μΌ°μ΅λλ€.");
}
@Override
public void airConOFF() {
System.out.println("μμ΄μ»¨μ κ»μ΅λλ€.");
}
@Override
public void setAirConTemp(int tmp) {
System.out.println("μμ΄μ»¨ μ€μ μ¨λλ₯Ό " + tmp + "λ‘ λ³κ²½ νμμ΅λλ€.");
}
@Override
public void autoDrvieON() {
System.out.println("μμ¨ μ£Όν λͺ¨λλ₯Ό μΌ°μ΅λλ€.");
}
@Override
public void autoDriveOFF() {
System.out.println("μμ¨ μ£Όν λͺ¨λλ₯Ό κ»μ΅λλ€.");
}
}
μΈν°νμ΄μ€μ μμμ΄ λμμ μ μ© κ°λ₯νλ€λ κ²μ μλ κ²μ΄ μ€μ
κ·Έλ€μ§ μ€μν μμ μ½λλ μλ.
Main
public class Main {
public static void main(String[] args) {
SportsCar sportsCar = new SportsCar(true, 20, true, 100,
"black","2023",false);
sportsCar.viewInfo();
}
}
μλ : 100
μμ : black
μ°λ : 2023
μμ΄μ»¨ : ON
μμ¨μ£Όν : ON
μ¨λ : 20
ν°λ³΄λͺ¨λ : false
μΈν°νμ΄μ€ νμ©
ν ν΄λμ€κ° μ¬λ¬ ν΄λμ€λ‘ λΆν° μμμ λ°μΌλ©΄ μ¬λ¬κ°μ§ λ¬Έμ λ°μ
μλ°λ μ΄λ° λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ ν ν΄λμ€κ° μ¬λ¬ μΈν°νμ΄μ€λ₯Ό ꡬνν μ μμ.
Buy
public interface Buy {
void buy();
default void order() {
System.out.println("ꡬ맀 주문");
}
}
- μΈν°νμ΄μ€λ ꡬνλΆλ₯Ό κ°μ§ μ μμ§λ§ μμΈμ μΌλ‘ default λ©μλλ ꡬνλΆ{}κ° μμ.
μ΄λ‘ μ μΌλ‘λ κ° μΈν°νμ΄μ€κ° μ€λ³΅λ default λ©μλλ₯Ό κ°μ§ μ μλ€.
λ€λ§, μ΄λ΄ κ²½μ° λνλ μ μλ λ¬Έμ λ μλ μ½λλ₯Ό ν΅ν΄ νμΈ
Sell
public interface Sell {
void sell();
default void order() {
System.out.println("νλ§€ μ£Όλ¬Έ");
}
}
Customer
public class Customer implements Buy, Sell{
@Override
public void buy() {
System.out.println("ꡬ맀νκΈ°");
}
@Override
public void order() {
System.out.println("κ³ κ° μ£Όλ¬Έ");
}
@Override
public void sell() {
System.out.println("νλ§€νκΈ°");
}
}
- μλ default λ©μλλ μμ ν΄λμ€μμ μ€λ²λΌμ΄λ©μ ν΄λ λκ³ , μν΄λ λμ§λ§ κ° μΈν°νμ΄μ€μμ κ°μ λ©μλλ₯Ό default νλ©΄ μμ ν΄λμ€μμ λͺ¨μμ΄ μ겨λ²λ¦Ό.
- λ°λΌμ, λͺ¨μμ νΌνκΈ° μν΄ ν΄λΉ λ©μλλ₯Ό λ°λμ μ€λ²λΌμ΄λ© ν΄μ€μΌ ν¨.
μμdefault void order(){}
λ©μλ μ²λΌ..(κ° μμ ν΄λμ€μμ μ€λ²λΌμ΄λ© μνλ©΄ μ€λ₯λΈ)
μμ ν΄λμ€μμ μ€λ²λΌμ΄λ© νλ μκ° λΆλͺ¨ ν΄λμ€μ μλ default λ©μλλ μ¬λΌμ Έ λ²λ¦Ό.
Main2 ν΄λμ€μμ νμΈ κ°λ₯!
Main1
public class Main {
public static void main(String[] args) {
// 1λ²
Customer customer = new Customer();
Buy buyer = customer;
buyer.buy();
// 2λ²
Buy buyer2 = new Customer();
buyer2.buy();
// 3λ²
Sell sell = customer;
sell.sell();
// 4λ²
Customer customer1 = (Customer) sell;
customer1.buy();
customer1.sell();
}
}
Buy buyer = customer;
Customer νμ μ customer μ°Έμ‘°λ³μλ₯Ό Buy μΈν°νμ΄μ€ν buyer μ°Έμ‘°λ³μμ λμ (casting λ°μ)
Buyμ Customerκ° μμ κ΄κ³λ‘ μκΈ° λλ¬Έμ νλ³ν κ°λ₯ν¨.buyer.buy();
buyerλ Buy μΈν°νμ΄μ€μ λ©μλλ§ νΈμΆ κ°λ₯Buy buyer2 = new Customer();
1λ², 2λ² κ°μSell sell = customer;
1λ²κ³Ό κ°μ΄ λΆλͺ¨μμ μμμΌλ‘μ νλ³νμ μλμΌλ‘ μΌμ΄λ¨sell.sell();
μ΄κ²λ 1λ²κ³Ό κ°μ΄ Sell μΈν°νμ΄μ€κ° μκ³ μλ λ©μλλ§ μ κ·Ό κ°λ₯Customer customer1 = (Customer) sell;
λ€μ μμΌλ‘ νλ³ν, μμμ΄ λΆλͺ¨λ‘ λ³νν λλ λͺ μμ μΌλ‘ ν΄μΌ ν¨.
μ΄λ₯Ό 'λ€μ΄ μΊμ€ν 'μ΄λΌκ³ νλ€.
Main2
public class Main2 {
public static void main(String[] args) {
Customer customer = new Customer();
Buy buyer = customer;
buyer.buy();
buyer.order(); // Customer ν΄λμ€μμ μ¬μ μλ λ©μλκ° νΈμΆ λ¨.
Sell seller = customer;
seller.order(); // λμΌ
}
}
ꡬ맀νκΈ°
κ³ κ° μ£Όλ¬Έ
κ³ κ° μ£Όλ¬Έ
- μμ λ§νλ κ² μ²λΌ Customer ν΄λμ€κ° Buy, Sell λ μΈν°νμ΄μ€λ₯Ό ꡬννκ³ Buy μΈν°νμ΄μ€μ Sell μΈν°νμ΄μ€μ λκ°μ default order() λ©μλλ₯Ό κ°μ§λ κ²½μ° λ¬Έμ κ° λλ€.
- μ΄ κ²½μ°, μμλ°λ Customer ν΄λμ€μμ μ¬μ μν΄μ μ¬μ©ν΄μΌ ν¨.
μ¬μ μν λ€ mainμμ κ° μΈν°νμ΄μ€ κ°μ²΄λ₯Ό μμ±ν΄μ λ©μλλ₯Ό νΈμΆνλ©΄
μμ ν΄λμ€μμ μ¬μ μν λ©μλκ° νΈμΆλ¨