πŸ’» 상속

K CΒ·2021λ…„ 8μ›” 9일
0

java

λͺ©λ‘ 보기
1/4

πŸ“Œ 1. μƒμ†μ˜ κ°œμš”

상속

  • μƒμ†μ΄λž€ 이미 μ‘΄μž¬ν•˜λŠ” ν΄λž˜μŠ€λ‘œλΆ€ν„° 멀버듀을 λ¬Όλ €λ°›λŠ” 것
  • μƒμ†λ˜λŠ” 클래슀λ₯Ό 수퍼 클래슀라 ν•˜κ³ , 상속을 λ°›λŠ” 클래슀λ₯Ό μ„œλΈŒ 클래슀라 ν•œλ‹€.
  • μžλ°”μ—μ„œμ˜ 상속은 클래슀 μ •μ˜ λ‹€μŒ extendsλ₯Ό 써주고 슈퍼 클래슀 이름을 적어주면 λœλ‹€.
  • 상속은 쀑볡을 쀄인닀.
  • 닀쀑상속은 ν—ˆλ½ν•˜μ§€ μ•ŠλŠ”λ‹€.

πŸ“Œ 2. μƒμ†μ‚¬μš©

car class

public class P242_Car {
    int speed;
    int gear;
    public String color;
    public void speedUp(int increment){ //속도 증가 λ©”μ†Œλ“œ
        speed += increment;
    }
    public void speedDown(int decrement){   //속도 κ°μ†Œ λ©”μ†Œλ“œ
        speed -= decrement;
    }
}
## SportCar class (Car class μƒμ†λ°›μŒ)
```java
public class P242_SportCar extends P242_Car{    //car λ©”μ†Œλ“œλ₯Ό μƒμ†λ°›μŒ
    boolean turbo;
    public void setTurbo(boolean turbo) {   //터보λͺ¨λ“œ μ„€μ • λ©”μ†Œλ“œ
        this.turbo = turbo;
    }
}

Test class(Main)

public class P243_Test {
    public static void main(String[] args) {
        P242_SportCar s = new P242_SportCar();
        s.color = "Red";
        s.speedUp(100);
        s.speedDown(50);
        s.setTurbo(true);
        System.out.println(s.color);
    }
}

πŸ“Œ 3. μ ‘κ·Ό μ§€μ •μž

πŸ“Œ 4. μ ‘κ·Ό μ§€μ •μž

❓ μž¬μ •μ˜(μ˜€λ²„λΌμ΄λ”©)의 κ°œλ…

  • λ©”μ†Œλ“œ μž¬μ •μ˜λž€ μ„œλΈŒ ν΄λž˜μŠ€κ°€ ν•„μš”μ— 따라 μƒμ†λœ λ©”μ†Œλ“œλ₯Ό λ‹€μ‹œ μ •μ˜ν•˜μ—¬ μ‚¬μš©ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€.

❗ μž¬μ •μ˜μ‹œ μ£Όμ˜ν•  점

  • λ©”μ†Œλ“œμ˜ 헀더뢀뢄은 수퍼 클래슀의 헀더와 λ™μΌν•˜μ—¬μ•Ό ν•œλ‹€.
  • 즉, λ©”μ†Œλ“œμ˜ 이름, λ°˜ν™˜ν˜•, λ§€κ°œλ³€μˆ˜μ˜ κ°œμˆ˜μ™€ 데이터 νƒ€μž…μ΄ μΌμΉ˜ν•˜μ—¬μ•Ό ν•œλ‹€.
  • λ˜ν•œ, 수퍼클래슀의 λ©”μ†Œλ“œλ₯Ό μž¬μ •μ˜ν•˜λ €λ©΄ λ©”μ†Œλ“œκ°€ public 으둜 μ„ μ–Έλ˜μ–΄ μžˆμ–΄μ•Ό ν•œλ‹€.
  • private λ©”μ†Œλ“œλŠ” 재 μ •μ˜ λΆˆκ°€!

❓ @Override

  • μ»΄νŒŒμΌλŸ¬μ—κ²Œ 수퍼 클래슀의 λ©”μ†Œλ“œλ₯Ό μ˜€λ²„λΌμ΄λ“œ ν• λ €κ³  ν•œλ‹€λŠ” 것을 μ•Œλ €μ€„μˆ˜ μžˆλ‹€. λ§Œμ•½ μˆ˜νΌν΄λž˜μŠ€μ— κ·ΈλŸ¬ν•œ λ©”μ†Œλ“œκ°€ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λŠ” 것을 κ°μ§€ν•˜λ©΄ 였λ₯˜λ₯Ό λ°œμƒν•˜κ²Œ 됨

❓ super

  • μƒμ†κ΄€κ³„μ—μ„œ 수퍼 클래슀의 λ©”μ†Œλ“œλ‚˜ ν•„λ“œλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ°Έμ‘°ν•˜κΈ° μœ„ν•΄μ„œ μ‚¬μš©λ¨

πŸ“Œ 5. 상속과 μƒμ„±μž

  • μ„œλΈŒν΄λž˜μŠ€μ˜ μƒμ„±μžκ°€ 먼처 ν˜ΈμΆœλ˜κΈ°λŠ” ν•˜μ§€λ§Œ, 수퍼 ν΄λž˜μŠ€μ—μ„œ μƒμ†λœ 뢀뢄을 λ¨Όμ € μ΄ˆκΈ°ν™” ν•˜κΈ° μœ„ν•˜μ—¬ 수퍼 클래슀의 μƒμ„±μžκ°€ λ¨Όμ € μ‹€ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.
  • λͺ…μ‹œμ  호좜

    • λͺ…μ‹œμ μœΌλ‘œ 수퍼클래슀의 μƒμ„±μžλ₯Ό 호좜 ν• μˆ˜ μžˆλ‹€. μ΄λ•Œ superλΌλŠ” ν‚€μ›Œλ“œ μ‚¬μš©
    • 수퍼클래슀의 ν˜ΈμΆœμ€ λ°˜λ“œμ‹œ 생성μž₯의 첫번재 쀄이여야 함.그렇지 μ•ŠμœΌλ©΄ 컴파일 였λ₯˜ λ°œμƒ
  • λ¬΅μ‹œμ  호좜

    • μžλ°”μ—μ„œλŠ” λͺ…μ‹œμ μœΌλ‘œ 수퍼클래슀의 μƒμ„±μžλ₯Ό ν˜ΈμΆœν•΄μ£Όμ§€ μ•Šμ•„λ„ μ„œλΈŒ 클래슀의 객체가 생성될 λ•Œ μžλ™μ μœΌλ‘œ 수퍼 클래슀의 μƒμ„±μžκ°€ 호좜
    • λ§Œμ•½ μƒμ„±μžκ°€ ν•˜λ‚˜λΌλ„ μ •μ˜λ˜μ–΄ μžˆλŠ” 경우 λ””ν΄νŠΈ μƒμ„±μžλ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•˜μ§€μ•ŠμŒ
    • κ·ΈλŸ¬λ―€λ‘œ 수퍼클래슀의 μƒμ„±μžλ₯Ό λͺ…μ‹œμ μœΌλ‘œ ν˜ΈμΆœν•΄μ£Όμ–΄μ•Ό 함
class Shape {
    public Shape(String msg) {
        System.out.println("Shape μƒμ„±μž()" + msg);
    }
}
public class P254_Rectangle extends Shape{
   public P254_Rectangle(){
       super("MSG");    //슈퍼 λ©”μ†Œλ“œλ₯Ό λͺ…μ‹œν•΄μ€˜μ•Όν•¨
       System.out.println("Rectangle μƒμ„±μž()");
   }
    public static void main(String[] args) {
        P254_Rectangle d = new P254_Rectangle();
        System.out.println(d);
    }
}

πŸ“Œ 6. Object 클래슀

  • μžλ°”μ—μ„œλŠ” 클래슀λ₯Ό μ •μ˜ν•  λ•Œ λͺ…μ‹œμ μœΌλ‘œ 수퍼 클래슀λ₯Ό μ„ μ–Έν•˜μ§€ μ•ŠμœΌλ©΄ Objectν΄λž˜μŠ€κ°€ 수퍼 ν΄λž˜μŠ€κ°€ λœλ‹€.
  • Object ν΄λž˜μŠ€λŠ” java.langνŒ¨ν‚€μ§€μ— λ“€μ–΄ 있으며 μžλ°” 클래슀 계측 κ΅¬μ‘°μ—μ„œ 맨 μœ„μ— μœ„μΉ˜ν•˜λŠ” 클래슀

πŸ”” κ΄€μ‹¬μžˆκ²Œ 봐야할 λͺ‡κ°€μ§€μ˜ λ©”μ†Œλ“œ

  • getClass() λ©”μ†Œλ“œ

    • μ–΄λ–€ 클래슀둜 μƒμ„±λ˜μ—ˆλŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό λ°˜ν™˜
    • λ¦¬ν”Œλ ‰μ…˜(reflection) μ΄λΌλŠ” 기법을 κ΅¬ν˜„ν•œ 것
      객체 μžμ‹ μ— λŒ€ν•˜μ—¬ μ§ˆλ¬Έμ„ 던질 수 μžˆλŠ” 방법
  • equals() λ©”μ†Œλ“œ

    • 두 객체λ₯Ό λΉ„κ΅ν•˜μ—¬ κ°™μœΌλ©΄ trueλ₯Ό λ°˜ν™˜ν•œλ‹€.
  • finalize() λ©”μ†Œλ“œ

    • 콜백 λ©”μ†Œλ“œλ₯Ό μ •μ˜ν•œλ‹€.이것은 객체가 μ†Œλ©Έλ˜κΈ° 직전에 ν˜ΈμΆœλœλ‹€. Object 클래슀의 finalize()μ—μ„œλŠ” 아무것도 ν•˜μ§€ μ•Šμ§€λ§Œ μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ μž¬μ •μ˜ν•˜μ—¬μ„œ μžμ›μ„ λ°˜λ‚©ν•˜λŠ” λ“±μ˜ 정리 과정을 싀행함
  • toString() λ©”μ†Œλ“œ

    • μž¬μ •μ˜ν•˜μ—¬μ•Ό ν•˜λŠ” λ©”μ†Œλ“œ
    • 객체의 λ¬Έμžμ—΄ ν‘œν˜„μ„ λ°˜ν™˜

πŸ“Œ 7. μ’…λ‹¨ν΄λž˜μŠ€μ™€ 쒅단 λ©”μ†Œλ“œ

  • μˆ˜νΌν΄λž˜μŠ€μ—μ„œ 쒅단 λ©”μ†Œλ“œλ‘œ μ„ μ–Έλœ λ©”μ†Œλ“œλŠ” μ„œλΈŒ ν΄λž˜μŠ€μ—μ„œ λŒ€μΉ˜ 될 수 μ—†λ‹€.
    반면 좔상 λ©”μ†Œλ“œλŠ” μ‚¬μš©λ˜κΈ° 전에 λ°˜λ“œμ‹œ λŒ€μΉ˜λ˜μ–΄μ•Όλ§Œ ν•œλ‹€. 좔상 λ©”μ†Œλ“œλŠ” λͺΈμ²΄κ°€ μ •μ˜λ˜μ§€ μ•Šμ€ λ©”μ†Œλ“œλ₯Ό 의미
  • μ’…λ‹¨ν΄λž˜μŠ€

    • μƒμ†μ‹œν‚¬μˆ˜ μ—†λŠ” 클래슀λ₯Ό λ§ν•œλ‹€. ν•„μš”ν•œ μ΄μœ λŠ” λ³΄μ•ˆμƒμ˜ 이유 λ•Œλ¬Έ
    • λŒ€ν‘œμ μΈ 예) String클래슀 ,μ»΄νŒŒμΌλŸ¬μ—μ„œ 많이 μ“°κΈ° λ•Œλ¬Έμ— 쒅단 클래슀둜 μ„ μ–Έλ˜μ–΄ 있음
  • μ’…λ‹¨λ©”μ†Œλ“œ

    • μ’…λ‹¨ν΄λž˜μŠ€κ°€ μ•„λ‹Œ 일반 ν΄λž˜μŠ€μ—μ„œ νŠΉμ •ν•œ λ©”μ†Œλ“œλ§Œ μž¬μ •μ˜λ  수 μ—†κ²Œ λ§Œλ“€λ €λ©΄ μ’…λ‹¨λ©”μ†Œλ“œλ‘œ μ„ μ–Έ

0개의 λŒ“κΈ€