메서드에서 수행할 작업을 완성시키지 않은 미완성으로 두고,
나중에 다른 클래스에서 이 메서드를 호출해서 재정의(Method Overriding)하여 사용하게 만드는 것으로,
전체 프로그래밍에서 일관성을 줄 수 있다.
추상클레스의 추상 메서드는 body가 없고, abstract로 시작한다.
추상 메서드는 작업을 구현하는 body가 없기 때문에 이를 "미완성적 개념"이라 한다.
그러므로 이 미완성적 메서드를 자식이 상속받아서 완성 시켜야한다는 것이 조건이다.
재지정해서 사용하지 않아도 무조건 자식은 상속받아서 객체로 가지고 있어야 한다.
abstract class AbsEx {
int value = 100;
final int VALUE2 = 1000; // 상수 이름은 보통 대문자로 정의
public int getValue() {
return value;
}
abstract public void setValue(int n); // 추상 메서드, { } 속(body)에 하는 일이 없다.
}
class AbsChild extends AbsEx {
int age = 10;
@Override
public void setValue(int n) { // 부모 추상 클래스의 메서드를 호출해서 재지정
age += n;
}
public int getValue() {
return age;
}
}
class ex {
public static void main(String[] args) {
// AbsEx a = new AbsEx(); 추상클래스 객체 생성 불가.
AbsChild a1 = new AbsChild();
a1.setValue(20);
System.out.println(a1.getValue());
}
}
30 출력
abstract class AbsClass { // 추상 클래스
int value = 100;
public int getValue() {
return value;
}
public abstract int changeValue(); // 추상 메서드
}
class AbsChild1 extends AbsClass {
public int changeValue() {
return value += 10;
}
}
class AbsChild2 extends AbsClass {
public int changeValue() {
return value -= 3;
}
}
class df {
public void test(AbsClass n) {
// 부모 클래스를 메서드의 인자로 사용, 모든 맴버들이 같이 사용될 수 있다.
System.out.println(n.changeValue());
// 부모 클래스, AbsClass 의 changeValue() 메서드를 부름
}
public void test1 (AbsChild1 n) {
System.out.println(n.changeValue());
}
public static void main(String[] args) {
AbsChild1 a1 = new AbsChild1();
AbsChild2 a2 = new AbsChild2();
System.out.println(a1.changeValue());
System.out.println(a2.changeValue());
System.out.println();
System.out.println(a1.getValue()); // a1.changeValue() 저장된 값 출력
System.out.println(a2.getValue()); // a2.changeValue() 저장된 값 출력
System.out.println();
df t = new df();
t.test(a1);
// a1객체에 정의된 값에서 객체 생성 시,
// 정의된 Class인 AbsChild1 Class의 함수인 changeValue()를 실행시켜 값을 얻는다.
t.test(a2);
// a2객체에 정의된 값에서 객체 생성 시,
// 정의된 Class인 AbsChild2 Class의 함수인 changeValue()를 실행시켜 값을 얻는다.
df t1 = new df();
t1.test1(a1);
// 똑같이 자식 클래스로 method를 생성해서 사용할 수 있으며,
// a1.changeValue() 이렇게 미리 값을 넣어주지 않은 상태에서는 사용이 불가하다.
}
}
JAVA enum 열거형 (0) | 2022.07.29 |
---|---|
JAVA Interface 인터페이스 (0) | 2022.07.29 |
JAVA Generics Class Method 제네릭 클래스 메서드, 배열 Array (0) | 2022.07.28 |
JAVA Object class 최상위 클래스 객체 (0) | 2022.07.28 |
JAVA 생성자, 접근 제한자(접근제어자), 추상 클래스 추상 메서드 개념정리 (0) | 2022.07.28 |