[Java] 추상 클래스 / 인터페이스
2021. 11. 24. 17:16ㆍLanguage`/Java
추상 클래스 (abstract)
- 선언은 되어 있으나, 코드가 구현되어 있지 않은 메소드
- 추상 메소드를 가지고 있으면, 반드시 추상 클래스로 선언
- 객체를 생성할 수 없다
- 레퍼런스 변수는 선언 가능하다
※ Example
abstract class Calculator{
public abstract int add(int a, int b);
public abstract int subtract(int a, int b);
public abstract double average(int[] a);
}
class Cal extends Calculator{ // 추상 메소드 구현
@Override
public int add(int a, int b) {
return a+b;
}
@Override
public int subtract(int a, int b) {
return a-b;
}
@Override
public double average(int[] a) {
double sum = 0;
for(int i=0; i<a.length; i++)
sum += a[i];
return sum/a.length;
}
}
public class test{
public static void main(String[] args) {
Cal t = new Cal();
System.out.println(t.add(10, 100));
System.out.println(t.subtract(10, 100));
System.out.println(t.average(new int [] {1, 3, 5, 7, 9, 11}));
}
}
-------------------
110
-90
6.0
인터페이스 (Interface)
- default, private, static 메소드들은 Interface 내에 코드가 작성되어 있어야 한다
- default 메소드의 접근 지정 = public (고정)
- private 메소드는 Interface 내에서만 호출 가능
- static 메소드의 접근 지정 = public(생략되면) or private(지정)
- 추상 메소드 = public abstract 생략 가능
- 필드(멤버 변수)를 만들 수 없다
- 객체를 생성할 수 없다
- 레퍼런스 변수는 선언 가능
- 인터페이스끼리는 상속 가능
※ Example
interface PhoneInterface{
final int TIMEOUT = 10000;
void sendCall();
void receiveCall();
default void printLogo(){
System.out.println("** Phone **");
}
}
interface mobilePhoneInterface extends PhoneInterface{
void sendSMS();
void receiveSMS();
}
interface MP3Interface{
public void play();
public void stop();
}
class smartPhone implements mobilePhoneInterface, MP3Interface{
@Override
public void sendCall() {
System.out.println("따르릉 따르릉~~");
}
@Override
public void receiveCall() {
System.out.println("전화 왔어요~~");
}
@Override
public void sendSMS() {
System.out.println("문자 가요~~");
}
@Override
public void receiveSMS() {
System.out.println("문자 왔어요~~");
}
@Override
public void play() {
System.out.println("음악 시작~~");
}
@Override
public void stop() {
System.out.println("음악 중단~~");
}
}
public class test{
public static void main(String[] args) {
smartPhone sp = new smartPhone();
sp.printLogo();
sp.sendCall();
sp.receiveCall();
sp.sendSMS();
sp.receiveSMS();
sp.play();
sp.stop();
}
}
---------------------------
** Phone **
따르릉 따르릉~~
전화 왔어요~~
문자 가요~~
문자 왔어요~~
음악 시작~~
음악 중단~~
추상 클래스 / 인터페이스
비교 | 목적 | 구성 |
추상 클래스 | ● 서브 클래스에서 필요로 하는 대부분의 기능을 구현해 두고, 상속받아 활용할 수 있게 한다 ● 서브 클래스에서 구현할 수 없는 기능을 추상 메소드로 선언해서 서브 클래스에서 구현하도록 |
● 추상 메소드, 일반 메소드 모두 포함 ● 상수, 변수 필드 모두 포함 |
인터페이스 | ● 상속받는 클래스의 목적에 따라 인터페이스의 모든 추상 메소드를 만들도록 하는 목적 | ● 변수 필드(멤버 변수)는 포함 X ● 상수, 추상 메소드, 일반 메소드, default 메소드, static 메소드 모두 포함 ● protected 접근 지정 선언 불가 ● 다중 상속 지원 |