인터페이스와 추상클래스 개념
모두 추상이라는 개념을 사용하여 자식클래스의 기능을 구현해줍니다.
추상클래스
뒤에 클래스라고 붙은 것처럼, 추상클래스는 클래스의 한 종입니다.
클래스의 일종이기 때문에 자식클래스에서 추상클래스를 상속받아 사용할 수 있고,
추상클래스에서 추상클래스를 상속받아서도 사용할 수 있습니다.
( 자식클래스는 일반 혹은 추상클래스 중 한개만 상속가능 )
추상클래스는 추상메소드를 사용할 수 있고, 자식클래스에서 추상메소드의 구현을 강제하도록 합니다.
추상클래스를 상속받은 자식클래스에서 추상메소드 구현을 안하면 오류가 발생합니다.
인터페이스
클래스의 유형이 아니기 때문에 자식클래스는 여러개의 인터페이스를 상속받을 수 있습니다.
인터페이스도 마찬가지로 추상메소드를 구현할 수 있습니다.
다만, 추상클래스는 일반메소드와 메소드에 몸체를 구성할 수 있는 반면,
인터페이스는 일반메소드와 메소드에 몸체를 구성할 수 없습니다.
또한 일반 변수도 사용이 불가능하고, 상수만 사용이 가능합니다.
인터페이스와 추상클래스 사용용도
그러면 이 두개는 어디에 사용될까요?
클래스는 객체가 어떠어떠 하다 라는 속성을 구현하는 것을 의미합니다.
추상클래스 또한 어떠어떠 하다 라는 의미를 지닙니다.
인터페이스는 가능한 것들을 표현해줍니다.
그래서 인터페이스 경우 able 로 끝나는 명칭을 많이 보셨을 수 있습니다. ( 대학생 수업때 매일 able 만 썼던 기억이 ㅠ )
인터페이스와 추상클래스 사용 예제
탈것이라는 추상클래스가 있습니다.
이 추상클래스를 상속받는 자동차/선박/비행기 추상클래스가 있고, 자전거 일반클래스가 있습니다.
이 상속받은 추상클래스는 다시한번 일반클래스에 의해 상속될 수 있습니다.
비행기 airbux, boxing 는 달릴 수도 있고, 날 수도 있기 때문에 2개의 인터페이스를 다중상속받습니다.
자전거, 자동차는 달릴 수만 있기 때문에 1개의 인터페이스를 상속받습니다.
내부 구현까지는 하지 않았습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
public class Test {
@SuppressWarnings("unused")
public static void main(String[] args) {
}
}
interface Runnable {
}
interface Flyable {
}
abstract class Vehicle {
// 탈것의 공통된 속성
}
abstract class Car extends Vehicle {
// 탈것에 속한 자동차의 공통된 속성
}
abstract class Ship extends Vehicle {
// 탈것에 속한 선박의 공통된 속성
}
abstract class Airplain extends Vehicle {
// 탈것에 속한 비행기의 공통된 속성
}
class bicycle extends Vehicle implements Runnable {
// 자전거는 탈것에 속해있고 달릴 수 있다
}
class k51 extends Car implements Runnable {
// k51 은 자동차에 속해있고 달릴 수 있다.
}
class k71 extends Car implements Runnable {
// k71 은 자동차에 속해있고 달릴 수 있다.
}
class airbux extends Airplain implements Runnable, Flyable {
// airbux 는 비행기에 속해있고 달리고 날 수 있다.
}
class boxing extends Airplain implements Runnable, Flyable {
// boxing 은 비행기에 속해있고 달리고 날 수 있다.
}
|
cs |
'Computer Language > JAVA' 카테고리의 다른 글
[JAVA] 자바와 PostgreSQL JDBC 연동방법 (2) | 2021.04.26 |
---|---|
[JAVA] 자바와 SQL Server JDBC 연동방법 (0) | 2021.04.13 |
[JAVA] 자바 일반클래스와 추상클래스의 상속 차이 (1) | 2021.03.31 |
[Java] 이클립스 The selection cannot be launched, and there are no recent launches 오류 (2) | 2021.03.31 |
[JAVA] 자바 public static void main (String[] args) 의미 (8) | 2021.03.28 |