추상화
: 구체적인 개념으로부터 공통된 부분들만 추려내어 일반화 할 수 있도록 하는 것
: 다시 말해서 일반적으로 사용할 수 있는 단계가 아닌 아직 미완성적 개념
: 상속을 목적으로 사용
추상메서드
: 메서드를 정의하면서 brace({})를 생략하여 실상 메서드가 하는 일(body)이 없이
: semicolon(;)으로 문장의 끝을 나타내었다.
: 그리고 abstract라는 예약어를 통해 현 메서드가 추상 메서드임을 명시하였다.
: 강제성을 부여한다.
: 동적 바인딩을 위해서 사용한다. ( 부모의 레퍼런스로 자식을 접근한다. )
(동적바인딩은 부모가 알고 있는 것만 접근할 수 있다.)
: 내가 갖고 있어야할 공통사항이지만(같은 목적이지만) 내가 값을 정할 수 없을 때 이름만 제공한다.
public abstract void absTest();
추상 클래스
: 추상 메소드를 하나 이상 가지고 있는 클래스
: 추상 메소드는 문법적으로 아무내용을 가지고 있지 않는 메소드
: 추상 메소드 사용 목적
1. 부모가 공통된 사항을 가지고 있어야 하기 때문에 이름을 제공
2. 강제성을 부여하기 위해
3. 정적 바인딩, 동적 바인딩 중 어느 것을 사용해도 사용자가 사용할 수 있게 제공하기 위해서
public abstract class AbsEx{ }
public abstract class AbsClass { // 추상클래스
public abstract void javaStudy(); // 추상메서드
}
public class AbsSubClass extends AbsClass{
@Override
public void javaStudy() {
System.out.println("인강이 최고지...");
}
}
public class MeongJa extends AbsClass {
@Override
public void javaStudy() {
System.out.println("책이 최고지...");
}
}
public class MainTest {
public static void main(String[] args) {
AbsSubClass asc = new AbsSubClass();
asc.javaStudy();
MeongJa mj = new MeongJa(); // 정적 바인딩.
mj.javaStudy();
// 동적 바인딩
// : 부모의 레퍼런스 변수로 자식의 객체를 전급
AbsClass ac; // 부모의 레퍼런스 변수
ac = asc; // 동적 바인딩
ac.javaStudy();
ac=mj;
ac.javaStudy();
}
}
반응형
'Java > java' 카테고리의 다른 글
내부 클래스 ( Inner Class ) (0) | 2020.08.11 |
---|---|
인터페이스(Interface) (0) | 2020.08.11 |
final (0) | 2020.08.11 |
상속 (0) | 2020.08.10 |
배열 (Array) (0) | 2020.08.06 |