GiantStepDEV

μΆ”μƒν΄λž˜μŠ€?

싀체가 μ—†λŠ” λΆ€λͺ¨κ°€ 상속을 μ£ΌλŠ” 것
● μΆ”μƒν΄λž˜μŠ€μ—λŠ” λ°˜λ“œμ‹œ 좔상 λ©”μ†Œλ“œκ°€ ν¬ν•¨λ˜μ–΄μ•Ό ν•œλ‹€.
● ν•΄λ‹Ή λ©”μ†Œλ“œλŠ” 상속 받은 μžμ‹ ν΄λž˜μŠ€μ—μ„œ λ°˜λ“œμ‹œ κ΅¬ν˜„ν•΄μ€˜μ•Ό ν•œλ‹€.(μ˜€λ²„λΌμ΄λ”©)
● μΆ”μƒν΄λž˜μŠ€μ˜ ν‚€μ›Œλ“œλŠ” abstract
● μΆ”μƒν΄λž˜μŠ€λŠ” 일반 λ©”μ†Œλ“œ, 좔상 λ©”μ†Œλ“œ, 일반 μΈμŠ€ν„΄μŠ€ ν•„λ“œ λ“± λͺ¨λ‘ 포함 κ°€λŠ₯ν•˜λ‹€.
=> (μΈν„°νŽ˜μ΄μŠ€μ™€ λ‹€λ₯Έ 점)

좔상 λ©”μ†Œλ“œ μ‚¬μš© λͺ©μ 

좔상 λ©”μ†Œλ“œκ°€ ν¬ν•¨λœ 클래슀λ₯Ό μƒμ†λ°›λŠ” μžμ‹ ν΄λž˜μŠ€κ°€ λ°˜λ“œμ‹œ 좔상 λ©”μ†Œλ“œλ₯Ό κ΅¬ν˜„ν•˜λ„λ‘ ν•˜κΈ° μœ„ν•¨.

좔상 λ©”μ†Œλ“œ μ„ μ–Έ

abstract λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„();
μ„ μ–ΈλΆ€λ§Œ μ‘΄μž¬ν•˜λ©°, κ΅¬ν˜„λΆ€λŠ” μž‘μ„±μ•ˆ 함.
μž‘μ„±λ˜μ§€ μ•Šμ€ κ΅¬ν˜„λΆ€λŠ” μžμ‹ ν΄λž˜μŠ€μ—μ„œ μ˜€λ²„λΌμ΄λ”©ν•˜μ—¬ μ‚¬μš©..!!!!

좔상 클래슀

ν•˜λ‚˜ μ΄μƒμ˜ 좔상 λ©”μ†Œλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 클래슀
객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ°μ—μ„œ μ€‘μš”ν•œ  νŠΉμ§•μΈ λ‹€ν˜•μ„±μ„ κ°€μ§€λŠ” λ©”μ†Œλ“œμ˜ 집합을 μ •μ˜ν•  수 μžˆλ„λ‘ ν•΄μ€Œ.
즉, λ°˜λ“œμ‹œ μ‚¬μš©λ˜μ–΄μ•Ό ν•˜λŠ” λ©”μ†Œλ“œλ₯Ό 좔상 ν΄λž˜μŠ€μ— 좔상 λ©”μ†Œλ“œλ‘œ μ„ μ–Έν•΄ λ†“μœΌλ©΄..
이 클래슀λ₯Ό μƒμ†λ°›λŠ” λͺ¨λ“  ν΄λž˜μŠ€μ—μ„œλŠ” 이 좔상 λ©”μ†Œλ“œλ₯Ό 반.λ“œ.μ‹œ. μž¬μ •μ˜ ν•΄μ•Όν•œλ‹€.
abstract class ν΄λž˜μŠ€μ΄λ¦„ {

...
    abstract λ°˜ν™˜νƒ€μž… λ©”μ†Œλ“œμ΄λ¦„();
...

}
μ΄λŸ¬ν•œ 좔상 ν΄λž˜μŠ€λŠ” κ΅¬ν˜„λΆ€κ°€ μ—†κΈ° λ•Œλ¬Έμ— μΈμŠ€ν„΄μŠ€ 즉 객체λ₯Ό 생성할 수 μ—†λ‹€.
λ”°λΌμ„œ 좔상 ν΄λž˜μŠ€λŠ” λ¨Όμ € 상속을 톡해 μžμ‹ 클래슀λ₯Ό λ§Œλ“€κ³ !
λ§Œλ“  μžμ‹ ν΄λž˜μŠ€μ—μ„œ 좔상 클래슀의 λͺ¨λ“  좔상 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ”©κΉŒμ§€ ν•΄μ•Ό
μžμ‹ 클래슀의 객체λ₯Ό 생성할 수 μžˆλ‹€.

μΆ”μƒν΄λž˜μŠ€ κΈ°λ³Έ 예제)

abstract class Animal {
    abstract void cry();
}

class Cat extends Animal {
    @Override
    void cry() {
        System.out.println("냐~옹 냐~옹");
    }
}

class Dog extends Animal {
    @Override
    void cry() {
        System.out.println("멍! 멍!");
    }
}

class Duck extends Animal {
    @Override
    void cry() {
        System.out.println("κ½₯!κ½₯!");
    }
}
import java.util.Scanner;

public class AbstractMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Animal animal = null;
        System.out.print("동물을 μ„ νƒν•˜μ„Έμš”.[1]고양이 [2]κ°•μ•„μ§€ [3]였리 : ");
        int ani = sc.nextInt();
        switch(ani) {
            case 1 : animal = new Cat(); break;
            case 2 : animal = new Dog(); break;
            case 3 : animal = new Duck(); break;
            default :
        }
        animal.cry();
    }
}
β˜… 좔상 λ©”μ†Œλ“œλŠ” abstract ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜κ³ , λ°˜λ“œμ‹œ μ„Έλ―Έμ½œλ‘ (;)으둜 λλ‚˜μ•Ό ν•œλ‹€.
β˜… 좔상 λ©”μ†Œλ“œλŠ” κ΅¬ν˜„λΆ€κ°€ μ—†λ‹€. 즉, {} μ€‘κ΄„ν˜Έκ°€ μ—†.λ‹€. 이것이 좔상화
=> μΆ”μƒν™”λŠ” 무얼 ν• μ§€λ§Œ 정해놓고, ꡬ체적인 행동은 μ œμ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.
     ν–‰λ™μ€ μƒμ†λ°›λŠ” μžμ‹ ν΄λž˜μŠ€λ“€μ΄ κ΅¬ν˜„ν•œλ‹€.

μΆ”μƒν΄λž˜μŠ€ μ‘μš© 예제)

μΈμŠ€ν„΄μŠ€ ν•„λ“œ, μƒμ„±μž, μΈμŠ€ν„΄μŠ€ λ©”μ†Œλ“œκ°€ ν¬ν•¨λœ 좔상 클래슀 생성!

Phone(λΆ€λͺ¨ 클래슀)

public abstract class Phone {
    String name;
    boolean isPower;
    
    Phone(String name) {
        this.name = name;
    }
    
    void setPower(boolean isPower) {
        this.isPower = isPower;
        if(isPower) {
            System.out.println("Phone Power ON");
        } else {
            System.out.println("Phone Power OFF");
        }
    }
    abstract void call();
}
abstract void call();
μƒμ†λ°›λŠ” μžμ‹ ν΄λž˜μŠ€λŠ” λͺ¨λ‘ call() 을 μ˜€λ²„λΌμ΄λ”© ν•˜μ—¬ μ‚¬μš©ν•΄μ•Ό 함!

SmartPhone(μžμ‹ν΄λž˜μŠ€)

public class SmartPhone extends Phone {
    SmartPhone(String name) {
        super(name);
    }
    
    @Override
    void call() {
        System.out.println("λΆ€λͺ¨μ˜ μš”μ²­μœΌλ‘œ 톡화 κΈ°λŠ₯ κ΅¬ν˜„");
    }
    
    public void internet() {
        System.out.println("인터넷을 μ—°κ²°ν•©λ‹ˆλ‹€.");
    }
}
λΆ€λͺ¨ ν΄λž˜μŠ€μ— λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžλ₯Ό μƒμ„±ν–ˆκΈ° λ•Œλ¬Έμ—
μžμ‹ν΄λž˜μŠ€μ—μ„œ super() μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨ μƒμ„±μž λ¨Όμ € ν˜ΈμΆœν•΄μ€€λ‹€.

λ¬Όλ‘  λΆ€λͺ¨ ν΄λž˜μŠ€μ— κΈ°λ³Έ μƒμ„±μžλ©΄ μžλ™ ν˜ΈμΆœλ˜λŠ”λ° λ§€κ°œλ³€μˆ˜κ°€ μžˆλŠ” μƒμ„±μžκ°€ 있으면 직접 ν˜ΈμΆœν•΄μ€˜μ•Ό ν•œλ‹€.
잘 기얡이 μ•ˆλ‚˜λ©΄ super,super() ν¬μŠ€νŒ…μ„ μ°Έμ‘°ν•˜μž.
https://developyanggaeng.tistory.com/109
 

μžλ°”(Java) - 객체 μ§€ν–₯ ν”„λ‘œκ·Έλž˜λ° (8) super, super()

super μžμ‹ ν΄λž˜μŠ€κ°€ λΆ€λͺ¨ 클래슀둜 λΆ€ν„° 상속 받은 ν•„λ“œ(멀버)λ₯Ό μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜ 클래슀 λ‚΄μ˜ λ©€λ²„λ³€μˆ˜μ™€ μ§€μ—­λ³€μˆ˜μ˜ 이름이 같을 경우 ꡬ뢄을 μœ„ν•΄ this. λ₯Ό μ‚¬μš©ν•˜λ“―μ΄ λΆ€λͺ¨ ν΄λž˜μŠ€μ™€ μžμ‹ 클래

developyanggaeng.tistory.com

call() μ˜€λ²„λΌμ΄λ”© ν•˜μ—¬ κΈ°λŠ₯ κ΅¬ν˜„
@Override
void call() {
    System.out.println("블라블라");
}
internet()은 SmartPhone(μžμ‹ 클래슀)μ—μ„œ λ§Œλ“  λ³„λ„μ˜ λ©”μ†Œλ“œ
=> λΆ€λͺ¨ ν΄λž˜μŠ€λŠ” λͺ¨λ¦„.
=> κ·Έλž˜μ„œ Mainμ—μ„œ λΆ€λͺ¨ 클래슀둜 μžμ‹ 클래슀 객체 μƒμ„±ν•˜λ©΄ internet() 호좜 μ•ˆ 됨~!
μ™œ? μ•žμ—μ„œλ„ λ§ν–ˆμ§€λ§Œ λΆ€λͺ¨κ°€ λͺ¨λ₯΄λŠ” λ©”μ†Œλ“œμ΄κΈ° λ•Œλ¬Έμ—.

Main

public class AbstractMain2 {
    public static void main(String[] args) {
        SmartPhone smartphone = new SmartPhone("아이폰12pro");
        smartphone.setPower(true);
        smartPhone.call();
        smartPhone.internet();
        
        Phone phone = new SmartPhone("κ°€λŸ­μ‹œs20");
        phone.setPower(true);
        phone.call();
profile

GiantStepDEV

@kongmi

ν¬μŠ€νŒ…μ΄ μ’‹μ•˜λ‹€λ©΄ "μ’‹μ•„μš”β€οΈ" λ˜λŠ” "κ΅¬λ…πŸ‘πŸ»" ν•΄μ£Όμ„Έμš”!