JAVA/코드

2022_10_17 연습 01 day09.inter.inherit

0304호 2022. 10. 17. 17:10

인터페이스는 클래스가 아님
  그러므로 일반변수나 일반메서드를 사용할 수 없다.
  
  interface가 선언되면 public static final을 생략해도 자동으로 붙음(상수)
  public interface 클래스명{}  -> public static final 클래스명{}
  메서드를 추상메서드형식으로 선언하면 abstract를 붙이지 않아도 자동으로 붙음(추상메서드)
  void run();  -> public abstract void run();
  상수와 추상메서드를 사용할때 사용함
  
  자바 8버전 이후엔 static과 default를 선언 가능
  
  인터페이스는 클래스랑 별개이기 때문에 클래스를 상속 받아도 인터페이스를 상속받는게 가능하다
  class Dog extends Animal implements 포유류 {}
  class 클래스명 extends 부모클래스 implements 인터페이스
  
  인터페이스는 다중상속을 지원한다 (,) 쉼표 하나로 연결
    여러 인터페이스를 동시 구현 할 수 있다.
단 인터페이스에 있는 모든 추상메서드는 자식클래스에서 모두 오버라이딩 되야한다.

  인터페이스는 객체의 사용 방법을 정의한 타입
   객체의 교환성을 높여주기 때문에 다형성을 구현하는 중요한 역할을함
   
   interface간에도 상속이 가능하다
   interface간에 상속은 extends를 이용한다
   
 인터페이스는 상수와 추상메서드 만을 구성멤버로 가진다
 1. 인터페이스는 기본적으로 다중상속을 지원한다.
 2. 자바의 인터페이스는 객체의 사용 방법을 정의한 타입(메서드 명세서)으로 다형성을 구현하는 매우 중요한 역할을 한다. 
    인터페이스도 데이터 타입(부모타입)이 될 수 있다!
 3. 사용방법이 동일한 클래스를 만드는 기술이다  
 인터페이스의 구현키워드는 implements 인터페이스간의 상속은 extends

package day09.inter.inherit;

public class MainClass {

	public static void main(String[] args) {
		
//		MyClass me = new MyClass();
		Inter2 me = new MyClass();
		me.some03();
		me.some04();
		Inter1 m1 = new MyClass();
		m1.some01();
		m1.some02();
		
		
	}
}
package day09.inter.inherit;

public interface Inter1 {
	
	void some01();
	void some02();

}
package day09.inter.inherit;

public interface Inter2 {

	void some03();
	default void some04() {
		System.out.println("디폴트 메서드");
	}
}
package day09.inter.inherit;

public interface Inter3 extends Inter1, Inter2{
	
	void some05();

}
package day09.inter.inherit;

public class MyClass implements Inter3{

	@Override
	public void some01() {
		System.out.println("inter1의 some01 오버라이드");
		
	}

	@Override
	public void some02() {
		System.out.println("inter1의 some02 오버라이드");
		
	}

	@Override
	public void some03() {
		System.out.println("inter2의 some03 오버라이드");
				
	}

	@Override
	public void some05() {
		System.out.println("inter3의 some05 오버라이드");
				
	}

}