728x90
반응형
Abstract Class(추상클래스)
- 추상클래스는 하나이상의 추상메서드를 가지는 클래스이다.
- 다형성을 가지는 메소드의 집합을 정의할 수 있다.
- 추상메소드는 상속받은 모든 클래스가 다 구현해야된다.
- 추상메소드를 알아야한다
추상메소드를 사용하는 이유
- 자바에서 추상 메소드의 목적은 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가
반드시 추상 메소드를 구현해야 될때 사용한다. - 만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있다.
- 하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는
추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현하게 된다.
추상메소드란?
- 선언부만 존재한다.
abstract 반환타입 메소드이름(); abstract void print();
- 반드시 오버라이딩해야만 사용할수 있는 메소드를 의미한다.
- 자바에서 추상 메소드 목적은 추상 메소드가 포함된 클래스를 상속받는
자식 클래스가 반드시 추상 메소드를 구현하도록 하는 방식이다.
추상메소드의 장점
- 중복되는 부분이나 공통적인 부분을 미리 만들어 놓을수 있다.
- 사용하는 쪽은 자신에게 필요한 부분만 재정의 할 수 있다.
추상클래스 구현
- 추상 클래스 Instrument 에 추상메소드 play 를 정의 했다.
- 상속받는 모든 클래스는 play를 필수 적으로 구현 해야 된다.
abstract class Instrument {
abstract void play();
}
class Drum extends Instrument
{
void play() { System.out.println("쿵쿵딱"); }
}
class Bass extends instrument
{
void play() { System.out.println("둥둥"); }
}
public class Polymorphism02 {
public static void main(String[] args) {
// Instrument a = new Instrument(); // 추상 클래스는 인스턴스를 생성할 수 없음.
Drum drum = new Drum();
Bass bass = new Bass();
drum.play();
bass.play();
}
}
Interface
- 자바에서는 클래스를 통한 다중상속을 지원하지 않는다.
- 인터페이스로 다중 상속으로 지원하고 있다.
- 인터페이스란 다른 클래스를 작성할때 기본이 되는 추상클래스이다.
- 인터페이스는 추상클래스와는 다르게 추상메소드와 상수만 가질수 있다.
인터페이스 선언
- 인터페이스의 모든 필드는 public static final 이어야 한다.
- 모든 메서드는 public abstract 이어야한다.
접근제어자 interface 인터페이스이름 {
public static final 타입 상수이름 = 값;
...
public abstract 메소드이름(매개변수목록);
...
}
인터페이스의 구현
- 인터페이스는 추상 클래스와 마찬가지로 자신이 직접 인스턴스를 생성할 수 없다.
class 클래스이름 implements 인터페이스이름 { ... }
interface class Instrument {
public abstract void play();
}
class Drum implements Instrument
{
public void play() { System.out.println("쿵쿵딱"); }
}
class Bass implements instrument
{
public void play() { System.out.println("둥둥"); }
}
public class Polymorphism03 {
public static void main(String[] args) {
// Instrument a = new Instrument(); // 추상 클래스는 인스턴스를 생성할 수 없음.
Drum drum = new Drum();
Bass bass = new Bass();
drum.play();
bass.play();
}
}
다중상속으로 구현하기
- 클래스는 다중상속이 안되므로 인터페이스를 상속받아 인터페이스로 만들었다.
- 그리고 다중 상속으로 MyInstruments 를 구현했다.
interface class Instrument {
public abstract void play();
}
interface Drum extends Instrument
{
public abstract void play();
}
interface Bass extends instrument
{
public abstract void play();
}
class MyInstruments Drum,Bass {
public void play() {
System.out.println("쿵쿵딱 둥둥");
}
}
public class Polymorphism03 {
public static void main(String[] args) {
MyInstruments myInstruments = new MyInstruments();
myInstruments.play();
}
}
인터페이스의 장점
- 인터페이스를 사용하면 다중 상속이 가능할 뿐만 아니라 다음과 같은 장점을 가질 수 있다.
- 1. 대규모 프로젝트 개발 시 일관되고 정형화된 개발을 위한 표준화가 가능하다.
- 2. 클래스의 작성과 인터페이스의 구현을 동시에 진행할 수 있으므로, 개발 시간을 단축할 수 있다.
- 3. 클래스와 클래스 간의 관계를 인터페이스로 연결하면, 클래스마다 독립적인 프로그래밍이 가능하다.
Abstract, Interface 차이점
Abstract | Interface | |
다중상속 | 불가 | 가능 |
목적 | 상속받아 기능을 확장 하는 목적 | 상속받는 모든 클래스에 반드시 동일한 메서드를 갖게 하기 위함 이다. 클래스들 간의 관계를 맺어 준다. |
접근제어자 | public protected private static 또는 final 이 아닌 필드가능 |
public static final 변수 public abstract 함수 |
참고: http://tcpschool.com/java/java_polymorphism_abstract
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] Stream API (0) | 2021.08.23 |
---|---|
[Java] static (0) | 2021.08.23 |
[Java] Exception(예외) (0) | 2021.08.23 |
[Java] Checked Exception, Unchecked Exception (0) | 2021.08.23 |
[Java] String, StringBuffer, StringBuilder (0) | 2021.08.23 |
댓글