"추상메소드"의 두 판 사이의 차이
(→차이점) |
잔글 (→같이 보기) |
||
(다른 사용자 한 명의 중간 판 하나는 보이지 않습니다) | |||
50번째 줄: | 50번째 줄: | ||
} | } | ||
− | ===추상메소드 사용 | + | ===추상메소드 사용=== |
====[[추상클래스]]==== | ====[[추상클래스]]==== | ||
추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. | 추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. | ||
− | 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다. | + | 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.<ref name="ClassInterface">나비와꽃기린, 〈[https://mkil.tistory.com/112 추상메소드/인터페이스]〉, 《개인블로그》, 2016-06-22</ref> |
#추상클래스 | #추상클래스 | ||
public abstract class ClassA { | public abstract class ClassA { | ||
67번째 줄: | 67번째 줄: | ||
====[[인터페이스]]==== | ====[[인터페이스]]==== | ||
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. | 모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. | ||
− | 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, [[다중상속]]을 지원한다. | + | 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, [[다중상속]]을 지원한다.<ref name="ClassInterface"></ref> |
#인터페이스 | #인터페이스 | ||
public interface InterfaceA { | public interface InterfaceA { | ||
104번째 줄: | 104번째 줄: | ||
* [[인터페이스]] | * [[인터페이스]] | ||
− | {{프로그래밍| | + | {{프로그래밍|검토 필요}} |
2020년 8월 28일 (금) 20:13 기준 최신판
추상메소드(abstract method)란 구현없이 선언만 되어 있는 메소드를 말한다. 추상 메소드는 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미한다. 메서드는 선언부와 구현부로 구성되어 있다. 추상 메서드란 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상 메서드이다. 실제 내용은 상속받는 클래스에서 구현하도록 비워둔 것이며, 추상메서드 역시 키워드 'abstract'를 앞에 붙여주고, 구현부가 위치할 {}대신 마침을 의미하는 ;을 작성한다. 조상으로부터 상속받은 추상 메서드 중 하나라도 구현하지 않는다면, 추상 클래스로 지정해 주어야 한다.
목차
목적[편집]
추상클래스는 실체클래스가 공통적으로 가져야 할 필드와 메소드들을 정의해놓은 추상적인 클래스로 실체 클래스의 멤버인 필드와 메소드를 통일화하기 위해 사용한다. 모든 실체들의 메소드 실행 내용이 동일하다면 추상클래스에 메소드를 작성하면 되지만 실행 내용이 실체클래스마다 달라야 할 경우 추상메소드를 사용하면 된다.
생성 및 구현[편집]
생성[편집]
추상메소드의 선언은 abstract 키워드를 사용하고 메소드 중괄호 {}가 없다.
[public | protected] abstract 리턴타입 메소드명(매개변수, ...);
public abstract classA { public abstract void methodA(int a); }
구현[편집]
추상메소드 오버라이딩[편집]
추상클래스에 선언되어 있는 추상메소드를 구현하는 것을 추상메소드의 재정의 또는 오버라이딩이라고 한다.
#추상클래스 public abstract class ClassA { //추상클래스 public String a; public void methodA() { System.out.println("일반 메소드입니다."); } public abtract void methodB(); //추상메소드 }
#추상메소드 오버라이딩_example1 public class ClassB entends ClassA { public ClassB() { //생성자 this.a = "test"; } @Override public void method() { System.out.pirintln("ClassB 추상메소드 오버라이딩"); { }
#추상메소드 오버라이딩_example2 public class ClassC entends ClassA { public ClassC() { //생성자 this.a = "example"; }; @Override public void method() { System.out.pirintln("ClassC 추상메소드 오버라이딩"); { }
추상메소드 사용[편집]
추상클래스[편집]
추상메소드를 하나라도 가진 클래스로 추상메소드가 하나라도 있다면 클래스명 앞에 abstract 키워드를 선언해야 한다. 만약 추상메소드가 하나라도 있어서 추상클래스가 된다면 해당 클래스는 객체를 생성할 수 없다.[1]
#추상클래스 public abstract class ClassA { int a; public void methodA { System.out.println("메소드입니다."); } public void methodB(); //추상메소드 }
인터페이스[편집]
모든 메소드가 추상메소드인 클래스로 인터페이스명 앞에 interface 키워드를 선언해야한다. 인터페이스의 멤버는 상수와 메소드만 있으며 필드는 없다. 인터페이스는 추상메소드를 포함하고 있어 객체를 생성할 수 없으며, 다중상속을 지원한다.[1]
#인터페이스 public interface InterfaceA { int a=5; public void methodA(); public void methodB(); }
차이점[편집]
각주[편집]
- ↑ 1.0 1.1 나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22
참고자료[편집]
- 신용권, 〈이것이 자바다〉, 《한빛출판네트워크》, 2015-01-06
- 나비와꽃기린, 〈추상메소드/인터페이스〉, 《개인블로그》, 2016-06-22
같이 보기[편집]