1. Extends[상속]

  1. [설명]
    1. 상속의 대표적인 형태임

    2. 부모의 메서드를 그대로 사용할 수 있고, 오버라이딩 할 필요없이 부모에 구현되어있는 것을 바로 사용이 가능함

    3. [예제]

      // 부모 클래스
      Class Animal {
      	public String getCrying() {
      		return crying;
      	}
      
      	public void setCrying(String crying) {
      			this.crying = crying;
      	}
      }
      
      // 자식 클래스 => 부모클래스 상속받음
      class Dog extends Animal {
      	public void print() {
      		System.out.println(crying);
      	}
      }
      
      // 출력 클래스 => 자식클래스
      public class AnimalCrying {
      	public static main(String[] args) {
      		Dog animal1 = new Dog();
      		System.out.println(animal1.getCrying());
      		animal1.print();
      	}
      }
      // Dog 클래스는 Animal을 상속 받았고, getCrying()
      // 메서드로 crying을 print함
      
      // animal의 getCrying메서드에서 crying을 직접
      // 바로 사용했고, extends를 했으니 메서드 뿐만
      // 아니라 변수까지 사용이 가능해 진 것!
      
    4. [심플한 접근제어자 설명]

      1. public : 전부, 어디에서든 사용범위가 넓음
      2. protected : 상속 or 동일패키지 범위내에서만 가능
      3. default : 접근제한자가 명시 되어 있지않으면 default값이 되고, 동일한 패키지 내에서만 접근이 가능
      4. private : 자기 자신의 클래스 내에서만 접근 가능
    5. [유의]

      1. 자바는 “다중상속”을 지원하지 않음!
        1. 다중상속?
          1. 부모가 두개 이상 존재할 수 있다는 의미임!
          2. 대처방안으로 **implements(인터페이스)**가 등장함

2. Implements[상속]

  1. [설명]
    1. 인터페이스 상속에 사용됨

    2. 부모는 선언만 하며, 반드시 자식이 정의를 오버라이딩해서 사용

    3. [예제]

      // 인터페이스
      interface Printer {
      	public static String hello = "Hello";
      	public static String bye = "Bye";
      	public void hello();
      	public void bye();
      }
      
      // implements[상속]
      class Person implements Printer {
      	@Override
      	public void hello() {
      		System.out.println(hello);
      	}
      
      	@Override
      	public void bye() {
      		System.out.println(bye);
      	}
      }
      
      // main method => 출력만 해주는 Test class
      public class PersonTest {
      	public static main(String[] args) {
      		Person person = new Person();
      
      		person.hello(); // Hello
      		person.bye(); // Bye
      	}
      }