728x90
abstract
abstract란 한국어로는 추상으로 번역된다.
이에 대한 정의는 뒤에서 내리도록 하고 지금 단계에서는 abstract라는 것이 상속을 강제하는 일종의 규제라고 생각하자.
즉 abstract 클래스나 메소드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제하는 것이 abstract다.
✔추상 클래스는 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
✔추상 메소드란 메소드의 시그니처만이 정의된 비어있는 메소드를 의미한다.
✔ 추상 클래스(abstract class)란 하나 이상의 추상 메소드(abstract method)를 포함하는 클래스이다.
✔추상 메소드는 선언만 있고 본체는 없는 함수이며 선언부에 ‘abstract’ 라는 키워드를 붙인다.
✔추상 메소드가 포함되었다면 클래스도 추상 클래스이므로 클래스명 앞에도 ‘abstract’키워드를 붙여야 한다.
✔이 클래스를 사용할 때, 클래스 선언부의 abstract를 보고 이 클래스에는 추상 메소드가 있으니
상속을 통해 구현해줘야한다.
추상 메소드의 접근 지정자로 private는 사용할 수 없다(자식 클래스가 사용해야되기때문에)
MainClass
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
package main;
import abstractClass.AbstractClass;
import myclass.MyClass;
import you.YouClass;
public class MainClass {
/*
abstract: 추상
메소드를 하나이상 포함하고 있는 클래스
abstract method: 내용은 없고 선언만 되어있는 메소드
public void method(int n){ < - prototype :메소드의사양
처리
}
public abstract void method(); 선언만되어잇는걸 추상화이다
*/
public static void main(String[] args) {
//AbstractClass ac = new AbstractClass();이건안된다
MyClass mycls = new MyClass();
mycls.method();
mycls.abstractMethod();
AbstractClass acls = new MyClass();//인스턴스를 부모클래스에서 잡았다.
acls.method();
acls.abstractMethod();
AbstractClass bcls = new AbstractClass() {
@Override
public void abstractMethod() {
// TODO Auto-generated method stub
System.out.println(" bcls abstractMethod()");
}
};
bcls.method();
bcls.abstractMethod();
AbstractClass absArr[] = new AbstractClass[3];
absArr[0] = new YouClass();
absArr[1] = new MyClass();
absArr[2] = new MyClass();
for (int i = 0; i < absArr.length; i++) {
absArr[i].method();
absArr[i].abstractMethod();
if(absArr[i] instanceof YouClass) {
//YouClass y = (YouClass)absArr[i];
//y.func();
((YouClass)absArr[i]).func();
}
}
}
}
|
cs |
AbstractClass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
package abstractClass;
public abstract class AbstractClass {
private int number;
public void method() {
System.out.println("AbstractClass method() ");
}
public abstract void abstractMethod();
//추상이다. 상상하다.
}
|
cs |
MyClass
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
package myclass;
import abstractClass.AbstractClass;
public class MyClass extends AbstractClass{
//메뉴 소스에서 오버라이드 클릭해서 설정가능
@Override
public void abstractMethod() {
// TODO Auto-generated method stub
System.out.println(" My Class AbstractClass method() ");
}
}
|
cs |
(instanceof 정리해놓기)
728x90
'JAVA' 카테고리의 다른 글
마크다운 실험 (0) | 2021.01.29 |
---|---|
15일차// 객체지향 프로그래밍 간단정리(7)✍// 인터페이스 interface (0) | 2021.01.29 |
14일차// 객체지향 프로그래밍 간단정리(5)✍// 상속 👩👧👧 (0) | 2021.01.29 |
14일차// 객체지향 프로그래밍 간단정리(4)✍// constructor (0) | 2021.01.29 |
14일차// 객체지향 프로그래밍 간단정리(3)✍// 유효범위, this (0) | 2021.01.28 |