μμ
μ€λ²λΌμ΄λ©
<κ°μ²΄μ§ν₯μ κ½ μμ!>
μλ°μλ μμμ΄λΌλ κ°λ μ΄ μ‘΄μ¬νλλ° μμ ν΄λμ€κ° λΆλͺ¨ν΄λμ€λ₯Ό μμ λ°μ μ μλ€.(νλμ λ©μλ κ°μ κ²λ€)
# μμμ ν΅ν΄ μ½λ μ€λ³΅ μ κ±°, μ¬μ¬μ©μ± μ¦κ° μ΄λ‘ μΈν΄ μμ°μ±κ³Ό μ μ§λ³΄μμ μ 리ν΄μ§λ€.
μμ
-> extends ν€μλλ₯Ό μ¬μ©ν΄ μ μν μ μλ€.
- ν΄λΉ ν€μλμ μλ―Έλλ‘ μμμ 'νμ₯' μ κ°λ μΌλ‘ μ΄ν΄νλ©΄ μ’λ€.
- μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ₯Ό λ¬Όλ €λ°μ μλ‘κ² νλ, λ©μλλ₯Ό μ μν μ μλ€. μμ ν΄λμ€μ λ©€λ² κ°μλ λ λΆλͺ¨μ κ²κ³Ό κ°κ±°λ λ§λ€.
(μμ ν΄λμ€κ° λ ν° λ²μ£ΌλΌκ³ μκ°νλ©΄ νΈν¨.)
μμ λ₯Ό ν΅ν΄ μ΄ν΄λ³΄λ©΄ ν¨μ¬ μ΄ν΄κ° λΉ λ₯΄λ€.
#Car -> λΆλͺ¨ ν΄λμ€
public class Car {
String company; // μλμ°¨ νμ¬
private String model; // μλμ°¨ λͺ¨λΈ
private String color; // μλμ°¨ μμ
private double price; // μλμ°¨ κ°κ²©
double speed; // μλμ°¨ μλ , km/h
char gear = 'P'; // κΈ°μ΄μ μν, P,R,N,D
boolean lights; // μλμ°¨ μ‘°λͺ
μ μν
public String getModel() {
return model;
}
public void setModel(String model) {
this.model = model;
}
public double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public char changeGear(char type) {
gear = type;
return gear;
}
public boolean onOffLights() {
lights = !lights;
return lights;
}
public void horn() {
System.out.println("λΉ΅λΉ΅");
}
}
#SportsCar -> μμ ν΄λμ€
public class SportsCar extends Car{
String engine;
public void booster() {
System.out.println("μμ§ " + engine + " λΆμ~\n");
}
}
#Main
public class Main {
public static void main(String[] args) {
// λΆλͺ¨ ν΄λμ€ κ°μ²΄μμ μμ ν΄λμ€ λ©€λ² μ¬μ©
Car car = new Car();
// car.engine = "Orion"; // μ€λ₯ ->μμν΄λμ€μμ μ μλ λΆλΆ.
// car.booster(); // μ€λ₯
// μμ ν΄λμ€ κ°μ²΄ μμ±
SportsCar sportsCar = new SportsCar();
sportsCar.engine = "Orion"; //μ¬κΈ°μμ μ¬μ©ν΄μΌ λλ€.
sportsCar.booster();
// μμ ν΄λμ€ κ°μ²΄μμ λΆλͺ¨ ν΄λμ€ λ©€λ² μ¬μ©
sportsCar.company = "GENESIS";
sportsCar.setModel("GV80");
System.out.println("sportsCar.company = " + sportsCar.company);
System.out.println("sportsCar.getModel() = " + sportsCar.getModel());
System.out.println();
sportsCar.horn();
System.out.println(sportsCar.changeGear('D'));
}
}
μ½λμμ λ³Ό μ μλ―, μμ ν΄λμ€λ λΆλͺ¨ ν΄λμ€λ₯Ό μμ λ°μκΈ° λλ¬Έμ ν΄λΉ ν΄λμ€μμ λ°λ‘ μ μνμ§ μμλ λΆλͺ¨ ν΄λμ€μ λ©€λ²λ₯Ό μμ μμ¬λ‘ μ¬μ©μ΄ κ°λ₯νλ€.
μ°Έκ³ ) 9λ²μ§Έ μ€, ν΄λμ€λ μ€κ³λμΌ λΏ μΈμ€ν΄μ€νλ₯Ό ν΄μ κ°μ²΄λ₯Ό λ§λ€μ΄μΌν¨!
#ν΄λμ€κ°μ κ΄κ³
- μμκ΄κ³: is
ex) μ€ν¬μΈ μΉ΄λ μλμ°¨μ΄λ€. μΌμ΄ν¬λ λμ νΈμ΄λ€.
- ν¬ν¨κ΄κ³: has
ex) μλμ°¨λ νμ΄μ΄λ₯Ό κ°κ³ μλ€. μ νκΈ°λ λ κ°λ₯Ό κ°κ³ μλ€.
-> Car ν΄λμ€μ ν¬ν¨λλ μΈκ°μ§ ν΄λμ€
# Car ν΄λμ€ (ν¬ν¨κ΄κ³)
public class Car {
static final String company = "GENESIS"; // μλμ°¨ νμ¬
String model; // μλμ°¨ λͺ¨λΈ
String color; // μλμ°¨ μμ
double price; // μλμ°¨ κ°κ²©
double speed; // μλμ°¨ μλ , km/h
char gear = 'P'; // κΈ°μ΄μ μν, P,R,N,D
boolean lights; // μλμ°¨ μ‘°λͺ
μ μν
Tire[] tire;
Door[] door;
Handle handle;
public Car(String model, String color, double price) {
this.model = model;
this.color = color;
this.price = price;
}
public void setTire(Tire ... tire) {
this.tire = tire;
}
public void setDoor(Door ... door) {
this.door = door;
}
public void setHandle(Handle handle) {
this.handle = handle;
}
public double gasPedal(double kmh, char type) {
changeGear(type);
speed = kmh;
return speed;
}
public double brakePedal() {
speed = 0;
return speed;
}
public char changeGear(char type) {
gear = type;
return gear;
}
public boolean onOffLights() {
lights = !lights;
return lights;
}
public void horn() {
System.out.println("λΉ΅λΉ΅");
}
}
ν¬ν¨λλ ν΄λμ€λ€μ΄ νλ, μμ±μμ μ μλ κ²μ λ³Ό μ μλ€.
# Main ν΄λμ€ (ν¬ν¨κ΄κ³)
public class Main {
public static void main(String[] args) {
// μλμ°¨ κ°μ²΄ μμ±
Car car = new Car("GV80", "Black", 50000000);
// μλμ°¨ λΆν : νμ΄μ΄, μ°¨λ¬Έ, νΈλ€ μ μΈ
Tire[] tires = new Tire[]{
new Tire("KIA", 150000), new Tire("κΈνΈ", 150000),
new Tire("Samsung", 150000), new Tire("LG", 150000)
};
Door[] doors = new Door[]{
new Door("LG", "FL"), new Door("KIA", "FR"),
new Door("Samsung", "BL"), new Door("LG", "BR")
};
Handle handle = new Handle("Samsung", "S");
// μλμ°¨ κ°μ²΄μ λΆν λ±λ‘
car.setTire(tires);
car.setDoor(doors);
car.setHandle(handle);
// λ±λ‘λ λΆν νμΈνκΈ°
for (Tire tire : car.tire) {
System.out.println("tire.company = " + tire.company);
}
System.out.println();
for (Door door : car.door) {
System.out.println("door.company = " + door.company);
System.out.println("door.location = " + door.location);
System.out.println();
}
System.out.println();
// μλμ°¨ νΈλ€ μΈμ€ν΄μ€ μ°Έμ‘°ν λ³μμ μ μ₯
Handle carHandle = car.handle;
System.out.println("carHandle.company = " + carHandle.company);
System.out.println("carHandle.type = " + carHandle.type + "\n");
// μλμ°¨ νΈλ€ μ‘°μν΄λ³΄κΈ°
carHandle.turnHandle("Right");
carHandle.turnHandle("Left");
}
}
μμ±μ λΆλΆμ΄ κΈ΄κ°λ―Όκ°νλλ° ν¬ν¨κ΄κ³λ₯Ό 곡λΆνλ©΄μ μμ°μ€λ½κ² μ΄ν΄κ° λμλ€.
Main λ©μλμ μ μλ λ°μ΄ν°λ₯Ό λ°μμμ ν΄λΉ ν΄λμ€ νλμ μ μ₯νλ€. μ΄κ²μ κ° ν΄λμ€μ μμ±μλ₯Ό ν΅ν΄ ν μ μλ€!
#λ€μ€μμ
- μλ°μμλ λ€μ€μμμ μ§μνμ§ μλλ€. μ½κ² λ§ν΄ λΆλͺ¨κ° μ¬λ¬ μμμ κ°λ 건 κ°λ₯νλ μμμ΄ μ¬λ¬ λΆλͺ¨λ₯Ό κ°μ§ μ μμ.
- λ€μ€μμμ μ§μνκ² λλ©΄ ν΄λμ€κ°μ κ΄κ³κ° 볡μ‘ν΄μ§κ³ λ§μ½ μμ ν΄λμ€κ° μ¬λ¬κ°μ λΆλͺ¨ν΄λμ€λ₯Ό μμ λ°μλλ°
κ°κΈ° λ€λ₯Έ λΆλͺ¨ν΄λμ€κ° κ°μ μ΄λ¦μ λ©€λ² λ³μλ₯Ό κ°κ³ μλ€λ©΄? μ΄κ²μ ꡬλΆν λ°©λ²μ΄ μλ€.
# final ν΄λμ€, λ©μλ
- κΈ°λ³Έμ μΌλ‘ μμμ μμ ν΄λμ€κ° λΆλͺ¨ ν΄λμ€λ₯Ό μ¬μ μνμ¬ μ¬μ©ν μ μκ² νλ κ²μ΄ λͺ©μ μ΄λ€. κ·Έλ°λ° λ³κ²½μ΄ λΆκ°λ₯ν ν΄λμ€, λ©μλλ₯Ό μμλ°λκ² λ¬΄μ¨ μλ―Έκ° μμκΉ? κ·Έλ κΈ° λλ¬Έμ final ν€μλκ° λΆμ ν΄λμ€λ λ μ΄μ μμν μ μλ ν΄λμ€κ° λλ€.
#Object
- λ§ κ·Έλλ‘ "κ°μ²΄"λ₯Ό μλ―Ένλ λ¨μ΄μ΄λ©° λ³΄ν΅ Object ν΄λμ€λ₯Ό μλ―Ένλ€.
** Object ν΄λμ€λ Javaλ΄μ λͺ¨νΌ ν΄λμ€λ€μ μ΅μμ λΆλͺ¨ ν΄λμ€μ΄λ€!
μ€λ²λΌμ΄λ© / super
#μ€λ²λΌμ΄λ©
- λΆλͺ¨λ‘λΆν° μμλ°μ λ©μλμ λ΄μ©μ μ¬μ μνλ κ²μ μ€λ²λΌμ΄λ© μ΄λΌκ³ νλ€.
μ λν μ΄μ @override λ₯Ό μ¬μ©νλ€.
@Override
public String breakPedal(){
speed =100; //μλ λΆλͺ¨ν΄λμ€μμλ ν΄λΉ λ©μλ νΈμΆ μ μ€νΌλ 0μΌλ‘ λ§λ€μμ
//μμ ν΄λμ€μμ μ¬μ μ
s.o.println("λΈλ μ΄ν¬λ μλ€!");
return speed; //100μ returnνκ² λ¨
}
- μ΄λ λ― λΆλͺ¨ ν΄λμ€μ λ©μλλ₯Ό μμ ν΄λμ€κ° μ¬μ μν΄μ μ¬μ©ν μ μμ
#super, super()
:this, this() μΈμ€ν΄μ€, μμ±μ μ΄κ²κ³Ό λΉμ·ν λͺ¨μ΅μ΄λ€.
super: μμν΄λμ€μμ λΆλͺ¨ν΄λμ€μ μ κ·Όν μ μκ² ν΄μ£Όλ λΆλͺ¨μμ μ κ°λ¦¬ν€λ ν€μλμ΄λ€.
#λ€νμ±
: κ°μ²΄μ§ν₯&μμμμ μ€μν νΉμ§μ΄λ€.
-> λ€μν ννλ₯Ό κ°μ§ μ μλ€.
κ°μ²΄λ₯Ό μμ±ν λ
Mammal mammal = new Whale(); ν΄λΉ μ μΈμ΄ κ°λ₯νλ€. -> κ³ λμμ ν¬μ λ₯ μ¦ λΆλͺ¨ν΄λμ€λ‘ μλμΌλ‘ νλ³νμ΄ κ°λ₯νλ€.
-> μ΄λ°μμΌλ‘ μλνλ³ννλ λ°©λ²μ΄ μκ³
λ, μ°Έμ‘°λ³μ νμ λ³νμ νμ©ν΄μ λ€νμ±μ ꡬνν μ μλ€!
- instance of
: λ€νμ± κΈ°λ₯μΌλ‘ ν΄λμ€μ μλ ν΄λμ€λͺ μ νμΈνλ κ²μ΄ νμνλ€. ν΄λΉ λͺ λ Ήμ΄λ₯Ό ν΅ν΄ νμΈ κ°λ₯νλ€.
κ²°κ³Όλ boolean νμ μΌλ‘ μΆλ ₯λλ€.
#μΆμν΄λμ€ -> abstract ν€μλ !
λΆλͺ¨ν΄λμ€ abstract ν΄λμ€ & λ©μλ
μμν΄λμ€ λΆλͺ¨ν΄λμ€λ₯Ό extends, μΆμλ©μλλ₯Ό λ°λμ @override ν΄μ μ¬μ©ν΄μΌν¨!
λ§μ½ ν΄λμ€ A, B, C μ λ©μλκ° κ°κ° 3κ°μ© μλ€. κ·Έλ°λ° μ½λλ₯Ό 보λ 2κ°λ μμ ν λκ°κ³ ν λ©μλλ§ λ΄μ©μ΄ λ€λ₯΄λ€.
κ·Έλ λ€λ©΄, μ΄λ΄ λ λΆλͺ¨ ν΄λμ€λ₯Ό μμ±ν΄ μμ ν λκ°μ λ©μλ λκ°λ μΌλ° λ©μλλ‘ μ μνκ³ λ€λ₯Έ λλ¨Έμ§ ν λ©μλλ§ μΆμλ©μλλ‘ μμ±ν΄ μμ ν΄λμ€ A, B, C κ° κ·Έκ²μ @override νμ¬ ν΄λΉ λΆλΆλ§ κ°κ° λ€λ₯΄κ² μμ±ν΄μ£Όλ©΄ λ κ²μ΄λ€.
-> μ½λλ‘ νμΈνκΈ°
- Car (λΆλͺ¨)
public abstract Car{
String company;
String color;
double speed;
public double gasPedal(){
speed = kmh;
return speed;
}
public double breakPedal(){
speed = 0;
return speed;
}
public abstract void horn();//μΆμλ©μλλ μ€κ΄νΈμμ΄ μ΄λ κ² μμ±νλ©΄ λλ€.
}
- AudiCar (μμ) .. νΈμμ μμν΄λμ€λ νλλ§ μμ±νμλ€.
public AudiCar extends Car { //λΆλͺ¨ν΄λμ€ μμλ°κ³
@Override //μ€λ²λΌμ΄λ©ν΄μ
public void horn(){
System.out.println("λΉ΅λΉ΅!"); //μΆμλ©μλλ₯Ό μμ±μμΌμ£Όλ©΄ λλ€.
}
//λ€λ₯Έ νλλ λ©μλλ λΉμ°ν μμλ°μ μν!
}
μ¬κΈ°κΉμ§ μμ! μΌλ¨ λ!
#interface
- λ κ°μ²΄λ₯Ό μ°κ²°ν΄μ£Όλ 맀κ°μ²΄ μν μ νλ€.
- μμκ΄κ³κ° μλ μλ‘ λ€λ₯Έ ν΄λμ€λ€μ΄ μλ‘ λμΌν λ©μλλ₯Ό ꡬνν΄μΌν λ μΈν°νμ΄μ€λ₯Ό μ¬μ©νλ©΄ λλ€.
- implements ν€μλλ₯Ό μ¬μ©νμ¬ μΈμ€ν΄μ€λ₯Ό ꡬνν μ μλ€.
^ λͺ¨λ λ©€λ²λ³μλ public static final μ΄μ΄μΌ ν¨.
^ λͺ¨λ λ©μλλ public abstract μ΄μ΄μΌ ν¨.
++μΈν°νμ΄μ€λ μΆμν΄λμ€μ λ§μ°¬κ°μ§λ‘ μ§!μ ! μΈμ€ν΄μ€λ₯Ό μμ±ν μ μκΈ° λλ¬Έμ ν΄λμ€μ ꡬνλμ΄ μμ±λλ€.
+ μΈν°νμ΄μ€κ°μ μμμ΄ κ°λ₯νκ³ μ΄λλ extends μ¬μ©.
+ μΈν°νμ΄μ€λ ν΄λμ€μ λ¬λ¦¬ λ€μ€μμμ΄ κ°λ₯νλ€.
μμ λ₯Ό μ΄ν΄λ³΄μ!
public class Main extends D implements C { //Mainμ Dν΄λμ€ μμλ°κ³
//C μΈν°νμ΄μ€ implementsλ ν¨.
//a(), b() -> μΈν°νμ΄μ€μ μΆμλ©μλ μ€λ²λΌμ΄λ©.
@Override
public void a() {
System.out.println("A");
}
@Override
public void b() {
System.out.println("B");
}
@Override
void d() {
super.d();
}
public static void main(String[] args) {
Main main = new Main();
main.a();
main.b();
main.d();
}
}
interface A {
void a(); //μΆμλ©μλ
}
interface B {
void b(); //μΆμλ©μλ public abstract λ μλ΅λ¨
}
interface C extends A, B { //μΈν°νμ΄μ€κ° λ€μ€μμ!
}
class D {
void d() {
System.out.println("D");
}
}
'JavaStudy' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TIL Java 3-* (2) | 2023.12.04 |
---|---|
TIL JAVA #3-2 (3) | 2023.12.01 |
TIL JAVA #3-1 (0) | 2023.11.30 |
TIL JAVA #2-4 (1) | 2023.10.20 |
TIL JAVA #2-3 (0) | 2023.10.19 |