- μμ = μ¬μ¬μ© + νμ₯
- μμμ λΆλͺ¨ν΄λμ€(μμν΄λμ€)λ‘λΆν° μμν΄λμ€(νμν΄λμ€)κ° μμλ°μ λΆλͺ¨ν΄λμ€μ λ©€λ²λ₯Ό κ·Έλλ‘ μΈ μ μκ²νλ κ²
- κ°μ²΄μ§ν₯μ μμμ κΈ°μ‘΄ μμμ λν΄ κ±°κΈ°μ νμν νΉμ±μ μΆκ°, μ¦ νμ₯μ μλ―Έκ° κ°ν¨ (μ¬μ¬μ© + νμ₯)
- μμνκΈ° μ μ μμμ λν Overrdingλ ν΄λΉ μ 리 νμ΄μ§μ μ 리ν΄λμμ
- ν΄λμ€λ₯Ό μ€κ³λμ λΉμ νλ©΄ μΆμ ν΄λμ€λ λ―Έμμ± μ€κ³λλ‘ ν΄λμ€μ ν€μλμΈ abstractλ₯Ό λΆμ΄λ©΄ λ¨
- μΆμ ν΄λμ€λ μΆμ λ©μλλ₯Ό 0κ° μ΄μ κ°μ§κ³ μλ ν΄λμ€λ‘ κ·Έ μΈμλ μΌλ° ν΄λμ€μ λ€λ₯΄μ§ μμ
- μΆμ ν΄λμ€λ κΈ°λ³Έμ μΌλ‘ μΌλ° ν΄λμ€μ λΉμ·νλ―λ‘ νμ ν΄λμ€λ€μκ² μμμ ν΅ν΄ μ¬μ©ν μ μκ²νκ³ extends λΌλ ν€μλλ‘ μμλ°μ
- μΆμ ν΄λμ€λ₯Ό μμλ°μ κ²½μ° μΌλ° ν΄λμ€μ λ€λ₯Έμ μ μΆμ λ©μλλΏμΈλ° ν΄λΉ μΆμ λ©μλλ ꡬνμ΄ λμ΄μμ§ μκΈ°λλ¬Έμ λ€λ₯Έ λ©μλλ€μ μμλ°μ κ·Έλλ‘ μ¬μ©ν μ μμ§λ§ μΆμ λ©μλλ€μ μ¬μ μ(μ€λ²λΌμ΄λ©) ν΄μ£Όμ΄μΌ ν¨
- μΆμ ν΄λμ€λ μ¦, μ¬μ μ ν΄μ£Όμ΄μΌνλ―λ‘ κ°μ²΄λ₯Ό λ§λ€ μ μλ ν΄λμ€μ΄κ³ μΆμ λ©μλλ νμ ν΄λμ€μμ λ©μλμ ꡬνμ κ°μ ν¨
- μΆμ ν΄λμ€λ₯Ό μμνλ μ§νκ°μλ μ°κ΄κ°κ³κ° μκ³ , λΉμ·ν νΉμ§μ κ°μ§κ³ μλ ν΄λμ€λ€μκ² μ¬μ©νλ νΉμ§μ κ°μ§ -> μμ μ κΈ°λ₯λ€μ νμ ν΄λμ€λ‘ νμ₯, μμ
- μΌλ° ν΄λμ€μ λμΌνκ² extendsλ₯Ό μ¬μ©νμ¬ λ€μ€ μμμ΄ λΆκ°λ₯
- μμμ κ΄κ³λ is a (kind of) κ΄κ³λΌκ³ ν¨
- ex) Person is a Object
- μΈν°νμ΄μ€λ ꡬνλ κ²μ΄ μλ λ°κ·Έλ¦Όλ§ κ·Έλ €μ Έ μλ κΈ°λ³Έ μ€κ³λ
- μΈν°νμ΄μ€λ λͺ¨λ λ©μλκ° μΆμ λ©μλλ‘ κ΅¬μ±λμ΄ μμ. κ·Έλ¬λ μΆμ ν΄λμ€μμ μΆμ λ©μλμ λ€λ₯΄κ² public abstractλ₯Ό μλ΅ κ°λ₯(무쑰건 λͺ¨λ λ©μλλ public abstract)
- μμμΌλ‘λ inplements λΌλ ν€μλλ₯Ό μ¬μ©νμ¬ μμλ°κ³ λ€μ€μμμ΄ κ°λ₯
- μμνλ μ§νκ°μλ μ°κ΄κ΄κ³κ° μ‘΄μ¬νμ§ μμ μ μμ -> μ μλ λ©μλλ₯Ό κ° ν΄λμ€μ λͺ©μ μ λ§κ² κΈ°λ₯μ ꡬννκΈ° μν΄ νμ₯, μμ
- Java 8 λΆν° static, default λ©μλ μ¬μ©, 9 μ΄νμλ μΈν°νμ΄μ€ λ΄λΆμλ§ μ¬μ©νλ private μ κ·Όμ νμ μ΄ κ°λ₯ν΄μ§
- μμμ κ΄κ³λ has a (kind of) κ΄κ³λΌκ³ ν¨
- ex) Person has a Swimming
- μΈν°νμ΄μ€μ μΆμ ν΄λμ€ λͺ¨λ λ€νμ±μ΄λ ν΄λμ€ νμ μ ν΅ν©νλ€λ κΈ°λ₯μ λμΌνμ§λ§ μ¬μ©νλ μμΉκ° λ€λ₯Ό μ μλ€
- 곡ν΅μΌλ‘ κ°μ§λ λ©μλκ° λ§μ μ€λ³΅ λ©€λ² ν΅ν©μ μν΄ κΈ°μ‘΄ ν΄λμ€μ²λΌ μμμ μ¬μ©νμ¬ κ°μ Έμ€λλ° νμ ν΄λμ€κ° μ€λ²λΌμ΄λνμ¬ μ¬μ μνλ κΈ°λ₯λ€μ 곡μ νκΈ° μν μμ κ°λ μ μ¬μ©ν λ μ£Όλ‘ μ¬μ©νκ³ μΈν°νμ΄μ€μ λ¬λ¦¬ κΈ°μ‘΄ ν΄λμ€λ₯Ό μ¬μ©νλ κ²μ²λΌ μ μ½μ΄ μμ
- μΈν°νμ΄μ€λ λμ λ¨ νλλ§ μμν μ μλ κΈ°μ‘΄ ν΄λμ€μ λ€λ₯΄κ² μ¬λ¬ μΈν°νμ΄μ€λ₯Ό μμμ΄ κ°λ₯νκ³ μ΄ν리μΌμ΄μ μ κΈ°λ₯μ μ μνλ ꡬν λ°©μμ΄λ λμμ λν΄ μΆμννλλ° μ¬μ©ν μ μμ. ν΄λμ€μ λ€λ₯΄κ² ꡬν κ°μ²΄κ° κ°μ λμμ νλ€λ κ²μ 보μ₯νκΈ° μν΄ μ¬μ©
- jdk 8 μ΄ν interfaceμμ ꡬνλΆκ° μλ μΌλ° λ©μλλ₯Ό μμ±μ΄ κ°λ₯
- λ©μλ μ μΈλΆμ default modifier μΆκ° ν λ©μλ ꡬνλΆ μμ±
- μ κ·Ό μ νμλ publicμΌλ‘ νμ λ¨ (μλ΅κ°λ₯)
- κΈ°μ‘΄μ interface κΈ°λ°μΌλ‘ λμνλ λΌμ΄λΈλ¬λ¦¬μ interfaceμ μΆκ°ν΄μΌ νλ κΈ°λ₯μ΄ λ°μνμ¬ νμνκ² λμμ
- ν΄λΉ λ©μλλ abstractκ° μλλ―λ‘ λ°λμ ꡬνν΄μΌ ν νμλ μμ
- default λ©μλμ μΆ©λμ κ²½μ° μ°μ μμλ λ€μκ³Ό κ°μ
- super class method μ°μ : super classκ° κ΅¬μ²΄μ μΈ λ©μλλ₯Ό κ°λ κ²½μ° default λ©μλλ 무μλ¨
- interface κ°μ μΆ©λ : νλμ interfaceμμ default λ©μλλ₯Ό μ 곡νκ³ λ€λ₯Έ interfaceμμλ κ°μ μ΄λ¦μ λ©μλκ° μμ λ sub classλ λ°λμ override ν΄μ μΆ©λ ν΄κ²°
- jdk 8 μ΄ν interfaceμμ ꡬνλΆκ° μλ static λ©μλλ₯Ό μμ±μ΄ κ°λ₯
- μΌλ° static λ©μλμ λ§μ°¬κ°μ§λ‘ λ³λμ κ°μ²΄κ° νμ μμ
- ꡬν체 ν΄λμ€ μμ΄ λ°λ‘ μΈν°νμ΄μ€ μ΄λ¦μΌλ‘ λ©μλμ μ κ·Όν΄μ μ¬μ©κ°λ₯
- jdk 9 μ΄ν interfaceμμ λ΄λΆμ μΌλ‘λ§ μ¬μ©νλ λ©μλλ₯Ό ꡬννκΈ° μν΄ private μ κ·Όμ νμ μμ±μ΄ κ°λ₯. static ν€μλλ‘ μ¬μ©μ κ°λ₯νμ§λ§ defaultλ μ¬μ©νμ§ λͺ»ν¨
- μΈλΆμ μ¬μ©νμ§ λͺ»νκ²νλ privateμ μΈλΆμμ μ¬μ©νκ² νκΈ°μν default μ¬μ© μ΄μ κ° μλ°λ¨
- μΈλΆλ‘ 곡κ°ν νμκ° μλ λ©μλ μ§μ μ μν΄ private method μΆκ°
interface MyInterface {
default void defaultMethod() {
helperMethod();
}
private void helperMethod() {
System.out.println("Helper method in MyInterface");
}
static void staticMethod() {
System.out.println("Static method in MyInterface");
}
private static void privateStaticHelperMethod() {
System.out.println("Private static helper method in MyInterface");
}
}
public class Main {
public static void main(String[] args) {
MyInterface myInterface = new MyInterface() {};
myInterface.defaultMethod();
MyInterface.staticMethod();
}
}- μ¦ μμ κ·Έλ¦Όμ²λΌ μΆμν΄λμ€λ λΆλͺ¨μ μμκ°μ μ°κ΄κ΄κ³κ° μλ μμμ΄ νμνμ§λ§ νΉμ κΈ°λ₯λ§μ μ¬μ μ ν΄μΌν λ μ¬μ©
- λλ¬Ό-ν¬μ λ₯, λλ¬Ό-μ‘°λ₯, ν¬μ λ₯-κ³ λ, ν¬μ λ₯-λ°μ₯, μ‘°λ₯-μ°Έμ, μ‘°λ₯-νκ·
- μΈν°νμ΄μ€λ μμ²λΌ μ°κ΄κ΄κ³λ μμ§λ§ νΉμ κΈ°λ₯μ μΆμννμ¬ λνλ΄μΌ ν κ²½μ° μ¬μ©. μ΄λ¬ν κΈ°λ₯λ€μ λ΄μ μΈν°νμ΄μ€λ λ€μ€ μμμ΄ κ°λ₯νλ―λ‘ νννκ³ μΆμ κΈ°λ₯λ€μ λ€μ μμλ°μ μ¬μ μνμ¬ λνλ΄λ κ²μ΄ κ°λ₯ν¨
- λ μμλ-λ°μ₯, λ μμλ-μ°Έμ, ν€μμΉ μμλ-κ³ λ, ν€μμΉ μμλ-νκ·
- μ°κ΄κ΄κ³μ μ°¨μ΄λ μμ§λ§ λλ μ μ¬μ©νλ κ°μ₯ ν° μ°¨μ΄μ μ μ¬μ© μ©λ
- μΆμν΄λμ€μ μ¬μ© μλ : IS -A "~μ΄λ€"
- μΈν°νμ΄μ€μ μ¬μ© μλ : HAS -A "~μ ν μμλ"
- λͺ¨λ κΈ°λ₯λ€μ μΈν°νμ΄μ€λ‘ μ¬μ©ν΄μΌ λλ©΄ κΈ°μ‘΄ μμμ ν΅ν΄ λΆλͺ¨ν΄λμ€μμ μΆμ λ©μλκ° μλ λ€λ₯Έ λ©μλλ€μ κ·Έλλ‘ κ°μ Έμ€λ κ²μ΄ λΆκ°λ₯ -> 곡ν΅μΌλ‘ νμν κΈ°λ₯λ μ¬μ μν΄μΌνλ λ²κ±°λ‘μ μ‘΄μ¬
abstract class Animal extends Creature { }
abstract class Fish extends Creature { }
interface Swimmable {
void swimming();
}
interface Flyable {
void flying();
}
interface Talkable {
void talking();
}
class Tiger extends Animal { }
class Parrot extends Animal { }
class People extends Animal implements Swimmable, Talkable{ // μΈν°νμ΄μ€λ₯Ό ꡬνν¨μΌλ‘μ¨ λμμ΄ νμν ν΄λμ€μλ§ λ°λ‘ μμμ ꡬμ λ°μ§μκ³ λ¬Άμ
@Override
public void swimming() {}
}
class Whale extends Fish implements Swimmable{
@Override
public void swimming() {}
}- abstract classλ₯Ό μ¬μ©νμ¬ ν΄λΉ νΉμ λ©μλλ§ μ¬μ©νλλ‘ ν μ μμ
- μΆμ ν΄λμ€λ₯Ό μμλ°μ λ, κ·Έ μΆμ ν΄λμ€κ° μ΄λ―Έ ꡬνν μΈν°νμ΄μ€μ λ©μλλ νμ ν΄λμ€μμ λ°λμ ꡬνν νμλ μμ§λ§ μΆμ ν΄λμ€μμ ꡬνλμ§ μμ μΆμ λ©μλλ νμ ν΄λμ€μμ λ°λμ ꡬνν΄μΌ ν¨
interface InterfaceA {
void methodA();
void methodB();
}
interface InterfaceB {
void methodC();
}
abstract class AbstractClass implements InterfaceA {
@Override
public void methodA() {
System.out.println("Implemented methodA in AbstractClass");
}
// methodBλ μΆμ λ©μλλ‘ λ¨κ²¨λμ΄ νμ ν΄λμ€μμ ꡬννλλ‘ ν¨
}
// ꡬ체μ μΈ ν΄λμ€ μ μ: μΆμ ν΄λμ€ μμ
class ConcreteClass extends AbstractClass implements InterfaceB {
@Override
public void methodB() {
System.out.println("Implemented methodB in ConcreteClass");
}
@Override
public void methodC() {
System.out.println("Implemented methodC in ConcreteClass");
}
}
// ν
μ€νΈ μ½λ
public class TestCode {
public static void main(String[] args) {
ConcreteClass concrete = new ConcreteClass();
concrete.methodA(); // μΆλ ₯: Implemented methodA in AbstractClass
concrete.methodB(); // μΆλ ₯: Implemented methodB in ConcreteClass
concrete.methodC(); // μΆλ ₯: Implemented methodC in ConcreteClass
}
}| λΉκ΅ | μΆμ ν΄λμ€ | μΈν°νμ΄μ€ |
|---|---|---|
| μ¬μ© ν€μλ | abstract | interface |
| μ¬μ© κ°λ₯ λ³μ | μ ν μμ | static, final, (μμ) |
| μ¬μ© κ°λ₯ μ κ·Ό μ μ΄μ | μ ν μμ | public |
| μ¬μ© κ°λ₯ λ©μλ | μ ν μμ | abstract method, default method, static method, private method |
| μμ ν€μλ | extends | implements |
| λ€μ€ μμ κ°λ₯ μ¬λΆ | λΆκ°λ₯ | κ°λ₯ |
- Lotto κ°μ²΄μ WinningLotto κ°μ²΄μ μ ν¨μ± κ²μ¬ λ°©μμ λμΌνκ³ λ€λ₯Έ μ ν¨μ± κ²μ¬ λ°©μμ΄ μμ΄ νΉμ ν΄λμ€λ₯Ό μμ λ°λ 보λμ€ λ²νΈκΉμ§ μλ WinningLottoμ μ€λ³΅ μ ν¨μ± κ²μ¬λ₯Ό μΆμννλ € νμμ
- κ·Έλ¬λ νλΌλ―Έν°κ° λ¬λΌ μΆμνλ‘ μ¬μ©νμ§ λͺ»νμμ
- κ³ λ―Όμ ν΄λ΄€λλ° λ§μ½ μ§ννλ€λ©΄ λ€μκ³Ό κ°μ΄ μ°μ§ μμμκΉ μΆμ
// Lotto κ°μ²΄
public class Lotto extends ValidateLottoNumbers {
private final static int NUMBERS_SIZE = 6;
private final List<Integer> numbers;
public Lotto(List<Integer> numbers) {
validateSize(numbers, ErrorMessage.INVALID_LOTTO_SIZE);
validateRange(numbers, ErrorMessage.INVALID_NUMBER_RANGE);
validateDuplication(numbers);
}
@Override
public void validateDuplication(List<Integer> numbers) {
Set<Integer> notDuplicationNumbers = new HashSet<>(numbers);
if (notDuplicationNumbers.size() != NUMBERS_SIZE) {
throw new CustomIllegalArgumentException(ExceptionMessage.DUPLICATE_LOTTO_NUMBER);
}
}
}
// WinningLotto
public class WinningLotto extends ValidateLottoNumbers {
private final static int WINNING_NUMBERS_SIZE = 7;
private final List<Integer> numbers;
private final int bonusNumber;
public WinningLotto(List<Integer> numbers, int bonusNumber) {
validateSize(numbers, ErrorMessage.INVALID_WINNING_NUMBERS_SIZE);
validateRange(numbers, ErrorMessage.INVALID_WINNING_NUMBERS_RANGE);
var validateNumbers = numbers.add(bonusNumber);
validateDuplication(validateNumbers);
validateBonusNumberRange(bonusNumber);
}
@Override
public void validateDuplication(List<Integer> numbers) {
Set<Integer> notDuplicationNumbers = new HashSet<>(numbers);
notDuplicationNumbers.add(bonusNumber);
if (notDuplicationNumbers.size() != WINNING_NUMBERS_SIZE) {
throw new CustomIllegalArgumentException(ExceptionMessage.DUPLICATE_WINNING_NUMBER);
}
}
private void validateBonusNumberRange(int bonusNumber) {
if (bonusNumber < 1 || bonusNumber > 45) {
throw new CustomIllegalArgumentException(ExceptionMessage.INVALID_BONUS_NUMBER_RANGE);
}
}
}
public abstract class ValidateLottoNumbers {
private final static int NUMBERS_SIZE = 6;
// ν΄λΉ ν΄λμ€λ λμμ΄ λμΌνλ―λ‘ μμνμ¬ μ§μ μ¬μ©
private void validateSize(List<Integer> numbers, ExceptionMessage exceptionMessage) {
if (numbers.size() != NUMBERS_SIZE) {
throw new CustomIllegalArgumentException(exceptionMessage);
}
}
// // ν΄λΉ ν΄λμ€λ λμμ΄ λμΌνλ―λ‘ μμνμ¬ μ§μ μ¬μ©
private void validateRange(List<Integer> numbers, ExceptionMessage exceptionMessage) {
for (int number : numbers) {
if (validateNumberRange(number)) {
throw new CustomIllegalArgumentException(exceptionMessage);
}
}
}
public abstract void validateDuplication(List<Integer> numbers);- λ§μ½ κ°μ²΄ λ΄μμ μ§μ ꡬννλλ‘ μ μνμ¬ κ°μ νλ € νλ€λ©΄ μΈν°νμ΄μ€λ₯Ό λ€μκ³Ό κ°μ΄ μ¬μ©νμ κ² κ°μ
- μ€κ³λ κ°μ λλμΌλ‘ μ¬μ©
- μΈν°νμ΄μ€μ μΆμλ©μλλ μ κ·Όμ νμλ₯Ό λͺ¨λ publicμΌλ‘ μ¬μ©ν΄μΌνλ―λ‘ μμλ°μ μ¬μ©ν κ²½μ° λ¬΄μ‘°κ±΄ publicμΌλ‘ μ¬μ©νμ¬μΌ ν¨
- java 8μ΄νμλ default ν€μλλ₯Ό μ¬μ©νμ¬ μ€λ²λΌμ΄λνμ§ μκ³ μμλ°μ μ¬μ©ν μ μμ ( μ¬μ μλ κ°λ₯νμ§λ§ μ¬μ μ νμ§ μμΌλ©΄ ν΄λΉ λ©μλκ° μ¬μ©λ¨ )
public interface ValidateLottoNumbers {
public void validateSize(List<Integer> numbers);
public void validateRange(List<Integer> numbers);
public void validateDuplication(List<Integer> numbers);
public default void testDefaultCode() {
System.out.println("test");
}
}
// Lotto κ°μ²΄
public class Lotto implements ValidateLottoNumbers {
public Lotto(List<Integer> numbers) {
validateSize(numbers);
validateRange(numbers);
validateDuplication(numbers);
// default λ©μλλ ꡬνμμ΄ μ¬μ©κ°λ₯
testDefaultCode();
}
// μμλ°μ κ°μ²΄λ§λ€ λ€λ₯΄κ² λ‘μ§ κ΅¬νμ΄ κ°λ₯ (μμλ°μ λ©μλλ λͺ¨λ μΆμλ©μλλ‘ κ°μ )
@Override
public void validateSize(List<Integer> numbers) {
...
}
@Override
public void validateRange(List<Integer> numbers) {
...
}
@Override
public void validateDuplication(List<Integer> numbers) {
...
}
}
// WinningLotto
public class WinningLotto implements ValidateLottoNumbers {
public WinningLotto(List<Integer> numbers, int bonusNumber) {
validateSize(numbers);
validateRange(numbers);
var validateNumbers = numbers.add(bonusNumber);
validateDuplication(validateNumbers);
validateBonusNumberRange(bonusNumber);
// default λ©μλλ μΆμνλ κ²μ΄ μλλ―λ‘ μ¬μ©νμ§ μμλ 무방
}
// μμλ°μ κ°μ²΄λ§λ€ λ€λ₯΄κ² λ‘μ§ κ΅¬νμ΄ κ°λ₯ (μμλ°μ λ©μλλ λͺ¨λ μΆμλ©μλλ‘ κ°μ )
@Override
public void validateSize(List<Integer> numbers) {
...
}
@Override
public void validateRange(List<Integer> numbers) {
...
}
@Override
public void validateDuplication(List<Integer> numbers) {
...
}
// μΆμλμ§ μμ κ°μ²΄ λ΄λΆ λ©μλ
private void validateBonusNumberRange(int bonusNumber) {
...
}
}- μ ν΄λμ€λ λ¨μΌ μμλ§ κ°λ₯νλ°, μΈν°νμ΄μ€λ 2κ° μ΄μ ꡬνμ΄ κ°λ₯ν κΉμ?
μ λ΅
μ ν΄λμ€λ λ¨μΌ μμλ§ κ°λ₯νλ°, μΈν°νμ΄μ€λ 2κ° μ΄μ ꡬνμ΄ κ°λ₯ν κΉμ?
- λ©μλ μκ·Έλμ²(μΆμν)λ§ μ μνκΈ° λλ¬Έμ λ©μλ ꡬνμ μμ±νμ§ μμ λ©μλμ μΆ©λμ΄ λ°μνμ§ μμ
- ꡬνμ μ± μμ΄ ν΄λμ€μκ² μμ
- λν΄νΈ λ©μλκ° μΆκ°λμμ§λ§ μλ° μ»΄νμΌλ¬κ° λν΄νΈ λ©μλ μΆ©λ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ μ»΄νμΌ νμμ κ²μ¬λ₯Ό μννμ¬ μ€λ₯λ₯Ό λ°μμν€λ―λ‘ μΆ©λ λ¬Έμ λ₯Ό ν΄κ²°νκ² ν¨
public class Person1{
void run() {
System.out.println("slow run");
}
}
public class Person2{
void run() {
System.out.println("fast run");
}
}
// ν΄λΉ ν΄λμ€λ₯Ό λκ° μμμ΄ κ°λ₯νλ€λ©΄ μμ ν΄λμ€λ μ΄λ€ λΆλͺ¨μ λ©μλλ₯Ό μ¬μ©ν΄μΌνλμ§ νμ
ν μ μμ
public interface Person1{
void run();
}
public interface Person2{
void run();
}
public class Person3 implements Person1, Person2 {
@Override
void run() {
System.out.println("μμ κ°λ₯");
}
}
// λ¨μΌ μμ, λ€μ€ μμ λͺ¨λ μΈν°νμ΄μ€λ₯Ό μμλ°μ ν΄λμ€λ λ©μλλ₯Ό μ§μ ꡬννλ―λ‘ λ¬Έμ κ° μΌμ΄λμ§ μμ -> λꡬνν
μμλ°μ κ±΄μ§ μ νμκ° μμ- μΆ©λμ΄ λ°μνλ©° μ»΄νμΌλ¬μμ μ€λ₯ λ°μ
- μΆ©λμ ν΄κ²°νκΈ° μν΄ μ§μ λͺ μμ μΌλ‘ Ovveride μ¬μ©νκ±°λ νΉμ ν΄λμ€λ₯Ό μ§μ ν΄μΌν¨
public interface Student {
String getName();
default String getGreetingMessage() {
return "Hi! I am a student!";
}
}
public interface Citizen {
String getName();
default String getGreetingMessage() {
return "Hi! I am a Citizen!";
}
}
public class Brad implements Citizen, Student{
@Override
public String getName() {
return "Brad";
}
// μ€λ³΅λ default λ©μλλ‘ μ»΄νμΌ μλ¬ λ°μ
// μλ μ½λ μ²λΌ λͺ
μμ μΌλ‘ μ€λ²λΌμ΄λ© νΉμ ꡬν ν΄λμ€ μ§μ μ μ§ννμ¬ μΆ©λμ ν΄κ²°ν΄μΌ ν¨
// @Override
// public String getGreetingMessage() {
// return "Hi! I am Brad!";
// }
// @Override
// public String getGreetingMessage() {
// return Student.super.getGreetingMessage();
// }
}
}23-11-09

