추상 클래스와 인터페이스

성혜·2024년 1월 22일
0

Java

목록 보기
11/25
post-thumbnail

추상 클래스, Abstract

추상 메서드를 가질 수 있다.

객체를 생성할 수 없다.

일반 클래스의 부모 클래스가 될 수 있다.

  • 자식 클래스들에게 강제로 추상 메서드를 구현하게 만든다.

(중요)
모든 객체들이 공통된 사용법(메소드)를 가지게 된다.

  • 일종의 규격을 만든다.

  • 추상 메서드 형식
abstract class 클래스이름 {
abstract 메소드선언;        // 메소드의 몸체는 없음
abstract 메소드선언;        // 메소드의 몸체는 없음
}

  • 예시 코드
abstract class Mouse { //자식 클래스의 추상 메소드를 강제로 구현하게 만든다.
	
	public abstract void click(); //자식의 객체 클래스를 표준화 시켜줌

}

class G305 extends Mouse {
	
	public void click() {
		System.out.println("저렴한 스위치를 사용해서 클릭합니다.");
		
	}
		
}
//결과
저렴한 스위치를 사용해서 클릭합니다.

❗주의 할 점❗
: 추상 클래스는 객체가 가지는 특성들을 추상화시켜 놓았을 뿐, 아직 구체화 시키지 못한 클래스이므로, 이 추상클래스를 상속하는 하위 클래스에서 좀 더 구체화 해야한다!
이때 추상 메서드를 하나도 빠짐없이 전부 구현 해야 객체를 생성할 수 있다.



인터페이스, Interface

추상클래스의 일종

인터페이스 내의 메서드는 모두 추상메서드

extends를 이용하여 상속을 하는 것이 아니라 implements를 이용하여 구현한다.


  • 인터페이스 멤버 선언
    : 추상 멤버만 선언할 수 있다.
interface Phone{
	
	//인터페이스 멤버 선언
	//- 추상 멤버만 선언할 수 있다.
//	public abstract void aaa();
//	public void bbb(); //모두 추상 메서드이기 때문에 abstract 생략 가능
//	void ccc();//모두 접근지정자가 public이기 때문에 public 생략 가능 
	
	//인터페이스는 구현된 멤버를 선언할 수 없다.
//	public int a;
//	public int b;
//	
//	public void ccc() {
//		
//	}
	
	void powerOn();
	void powerOff();
	void call();
	
}

class Iphone14 implements Phone  {

	@Override
	public void powerOn() {
		System.out.println("전원 on");
	}

	@Override
	public void powerOff() {
		System.out.println("전원 off");
		
	}

	@Override
	public void call() {
		System.out.println("전화 걸기");
		
	}
	

}


class S23 implements Phone{
	
	@Override
	public void powerOn() {
		System.out.println("전화기를 켭니다.");
	}

	@Override
	public void powerOff() {
		System.out.println("전화기를 끕니다.");
		
	}

	@Override
	public void call() {
		System.out.println("통화를 겁니다");
		
	}
	
}

//main
		Iphone14 p1 = new Iphone14();
		
		p1.powerOn();
		p1.powerOff();
		p1.call();
		
		
		S23 s1 = new S23();
		s1.powerOn();
		s1.powerOff();
		s1.call();

profile
하루를 정리하고 기록합니다.

0개의 댓글