'Head First Java'로 메소드 Override와 Overloading의 차이, 상속과 인터페이스의 차이에대한 개념을 익히다.

14/5/18 일

* 메소드 override, 메소드 overloading 모두 상위 클래스 메소드와 메소드명은 같다.
* 메소드 혹은 클래스 전체에 final을 달면 override 할 수 없게 만든다. (보안상의 이유, 혹은 변경 금지를 위해)

* override: 상속받은 메소드를 자신에게 맞는 메소드 내용으로 변경시. (다형성)

1. 인자는 같아야 하며 return 유형은 호환 가능해야 한다.
2. 메소드를 더 접근하기 어렵게 하면 안된다.

* overloading: 상속받은 메소드와 이름은 같고 인자 목록이 다른 메소드를 2개 만드는 것. (다형성과 관계 없음)

1. 인자 유형은 달라야 하고 리턴 유형은 달라도 된다.
2. 리턴 유형만 바꿀 수는 없다.
3. 접근단계를 마음대로 변경 가능하다.

* 상속 - extends 확장
- public으로 지정된 멤버(인스턴스 변수, 메소드)는 상속되고 private로 지정된 멤버는 상속되지 않는다.
- 상속받은 부모 클래스는 super로 호출할 수 있다.
ex) super.bark(); 상속받은 부모의 bark() 메소드 호출.

* 인터페이스 - implements 구현
- 상속을 1 개만 받을 수 있는 반면 인터페이스는 여러개 구현이 가능하다.

ex)
public class Canine{
   public void bark(){...}
   public void eat(){...}
}

public interface Pet{
   public abstract void beFriendly();
   public abstract void play();
}

public class Dog extends Canine implements Pet{
   public void beFriendly(){...}
   public void play(){...}

   public void bark(){...}
   public void eat(){...}
}