[Java] 추상 클래스와 인터페이스

김나우·2022년 1월 12일
0

Java

목록 보기
9/15

참고 도서
Do it 자바 완전정복

추상 클래스

추상 메서드는 '메서드의 본체가 완성되지 않은 미완성 메서드' 를 말한다.

abstract 리턴 타입 메서드명(입력매개변수);

abstract void save();

추상 메서드를 1개 이상 포함하고 있는 클래스는 반드시 추상 클래스로 정의 돼야한다.

abstract class Test{
	abstract void save();
    void read();
    // ...
}

추상 클래스의 특징

추상 클래스는 내부의 미완성 메서드 때문에 객체를 직접 생성할 수 없다.

abstract class A{
	abstract void save();
}

class B extends A{
	void save(){
    	System.out.println("save");
    }
}
A a = new A();	//X
A a = new B();	//O

추상 클래스 타입의 객체 생성 방법

추상 클래스의 객체를 생성하는 방법은 자식 클래스의 생성 여부에 따라 2가지로 나뉜다.

  1. 추상 클래스를 상속한 일반 클래스를 생성하는 것.
abstract class A{
	abstract void save();
}

class B extends A{
	void save(){
    	System.out.println("save");
    }
}

A a = new A();	//X
A a = new B();	//O
  1. 익명 이너 클래스를 사용하는 것.
A a = new A() {
	void save(){
    
    }
}

인터페이스

인터페이스는 내부의 모든 필드가 public static final로 정의되고, static과 default 이외의
모든 메서드는 public abstract로 정의된 객체지향 프로그래밍 요소다.

interface 인터페이스명{
	public static final 자료형 필드명 =;
    public abstract 리턴 타입 메서드명();
}

interface A{
	public static final int a = 2;
    public abstract void save();
}

제어자가 확정돼 있으므로 필드와 메서드 앞에 제어자를 생략해도 컴파일러가 자동으로 각각의
제어자를 삽입한다.

인터페이스의 상속

인터페이스를 상속할 때는 implements 키워드를 사용한다. 가장 큰 특징은
다중 상속이 가능하다는 것이다.

클래스명 implements 인터페이스명, 인터페이스명 {
}

다중 상속이 가능한 이유는 모든 필드가 public satic final로 정의돼 있어 실제 데이터값은 각각의 인터페이스 내부에 존재해 공간상 겹치지 않기 때문이다.

클래스와 인터페이스를 동시에 상속하려면

클래스명 extends 클래스명 implements 인터페이스명{
	//내용
}

이렇게 사용하면 된다.

인터페이스 타입의 객체 생성 방법

인터페이스도 추상 메서드를 포함하고 있으므로 객체를 직접 생성할 수 없다.
각각의 방법은 인터페이스를 상속한다는 것을 제외하고 추상 클래스의 객체 생성 방법과 같다.

interface A{
	void save();
}

class B implements A{
	void save(){
    	System.out.println("save");
    }
}

A a = new A();	//X
A a = new B();	//O
  1. 익명 이너 클래스를 사용하는 것.
A a = new A() {
	public void save(){
    
    }
}
profile
안녕하세요

0개의 댓글