본문 바로가기

국비지원_핀테크

13일차_ [java] 추상 클래스 ( Abstract ), 인터페이스 ( interface )

 

 

 

 

 

추상 클래스 ( Abstract )

추상 클래스 ( Abstract )

 

package abstract_;

// 추상 메소드를 가진 추상 클래스임을 선언
abstract class Test01{
	// 추상 메소드임을 선언
	public abstract void speed();
	public void myBreak() {
		System.out.println("멈춤 기능");
	}
}

class TestClass01 extends Test01{
	// 상속한 Test01 클래스에 추상 메소드가 존재하므로
	// 무조건 오버라이딩을 진행해줘야 한다 ( 하지 않으면 컴파일 오류 발생 )
	public void speed() {
		System.out.println("2025년식 최고속도 : 250km");
	}
	public void autoSysem() {
		System.out.println("자동 운전 모드");
	}
}

class TestClass02 extends Test01{
	// 상속한 Test01 클래스에 추상 메소드가 존재하므로
	// 무조건 오버라이딩을 진행해줘야 한다 ( 하지 않으면 컴파일 오류 발생 )
	public void speed() {
		System.out.println("2026년식 최고속도 : 300km");
	}
	public void autoSysem() {
		System.out.println("자동 운전 모드");
	}
}

public class Ex01 {
	public static void main(String[] args) {
		TestClass01 t = new TestClass01();
		t.speed();
		t.myBreak();
		t.autoSysem();
	}
}

※ 추상화를 사용하면 무조건 오버라이딩을 진행해야 한다 ※

추상화 클래스를 이용하는 경우 상속받았을때 무조건 오버라이딩을 상속 받는 클래스에 작성해야하기 때문에 다형성이 생긴다

 

 

 

 

 

 

 

 

 

 

인터페이스 ( interface )

인터페이스 ( interface ) - 변수에 static final 을 적지 않으면 default 로 적용된다

 

package interface_;

// 인터페이스 생성
interface A01{
	// 인터페이스의 메소드는는 {} 를 가지지 않는다
	public void test1();
}

// 인터페이스 생성
interface B01{
	// 인터페이스의 메소드는는 {} 를 가지지 않는다
	public void test1();
}

// 클래스 2개 생성
class Class01{}
class Class02{}

public class Ex01 extends Class01 implements A01, B01{
	// 인터페이스를 상속받을 경우 implements 를 사용
	// 인터페이스는 다중 상속이 가능하다!!!!
	
	@Override
	public void test1() {
		// 인터페이스에 test1() 추상 메소드가 존재한다
		// test1() 메소드를 선언하지 않으면 컴파일 오류가 발생한다
	}
}

인터페이스 코드 작성

 

인터페이스를 파일로 생성하여 상속

 

 

- 인터페이스를 사용하면 좋은 점 -

1. 메소드 이름을 단일화 할 수 있다 ( A 와 B 가 각자 개발해도 동일한 이름으로 기능을 다르게 개발 )

2. 인터페이스를 자료형으로 객체를 생성하여 내부에 담긴 인터페이스 메소드만 사용하거나 확인할 수 있다.

인터페이스 자료형으로 객체를 생성한 모습

728x90