일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- git flow
- 하이퍼레저패브릭
- #C++ 연산자함수오버로딩
- border-box
- #자바상속#자바이즈어#is~a
- #2차원배열
- #bubbleSort
- html object
- hyperledger transaction
- #다차원포인터
- #3차원배열
- #성적관리프로그램
- #C++ has~a
- html id
- mac terminal command
- relative path
- #android activity
- html5 new tag
- #binary
- #JAVASCRIPT
- html charset
- #1차원배열
- html video
- html youtube
- html plug-in
- html multimedia
- docker example
- html code
- #CallByAddress
- 토큰경제
- Today
- Total
A sentimental robot
Abstract class,추상클래스에 대해서 본문
final을..
- 상수(field)에 붙히면 고정 -> 상수화
- 객체(class)에 붙히면 상속관계 불가
- 메소드에 붙히면 Overriding 불가
추상클래스
- 추상메소드를 한 개 이상 가지고 있는 클래스를 추상클래스라고 한다.
- 구체화가 안되어있기 때문에 객체를 만들지 못한다.
- 오직 상속을 목적으로 쓰인다. 즉, 항상 부모 클래스가 된다.
- 추상클래스를 상속받은 클래스도 똑같이 객체를 만들지 못한다. ( 추상클래스를 상속 받음으로서 추상적인 부분이 생기기 때 문 ) -> Solution : 상속받은 구체화가 안된 부분을 오버라이딩을 통해 구체화 시킨다.
- 추상클래스를 상속받은 자식클래스들은 강제성을 부여받아 추상메소드들을 오버라이딩 해야한다. 그렇지 않을 경우 자식들도 추상클래스화 된다.( 추상메소드는 강제성을 지닌다. 상속받은 클래스가 무조건 추상메소드를 만들어야 한다. )
-
익명클래스로 사용하기 위해 사용 : 익명클래스로 사용할 경우에는 예외적으로 객체를 만들수 있다.(이벤트 처리시 주로 사용)
- 동적바인딩(dynamic binding) 을 주로 사용하기 위해 쓰인다.
cf) 잠깐! 동적바인딩이란?
1) 상속관계일 때만 사용가능
2) 부모의 레퍼런스로 자식을 접근하는 방식
3) 코드를 간결하게 만들 수 있다.
4) 동적 바인딩 시 부모의 레퍼런스로 접근할 수 있는 대상은 부모가 알고 있는 것들만 가능하다.
자식을 접근 할 순 있지만 자식에게 추가된 것은 접근할 수 없다. ( 제한적 )
public abstract class EE { // 추상클래스 : 추상메소드를 한 개 이상 가짐
abstract void draw(); // 추상 메소드 특징 : 바디가 없다.
}
public class AA extends EE {
@Override
void draw(){
System.out.println("AA");
}
void disp(){ // 자식이 추가적으로 만든 메소드는 부모가 모른다.
System.out.println("disp");
}
}
public class BB extends EE {
@Override
void draw() {
System.out.println("BB");
}
}
public class CC extends EE {
@Override
void draw(){
System.out.println("CC");
}
}
public class DD {
public static void main(String[]args){
/* AA aa=new AA(); // 정적바인딩
aa.draw();
BB bb=new BB();
bb.draw();
CC cc=new CC();
cc.draw(); */
EE ee=new AA(); // EE ee=new EE(); x 추상클래스는 객체생성불가 , 동적바인딩 : 부모의 레퍼렌스로 자식의 메소드 접근
ee.draw();
ee=new BB();
ee.draw();
ee=new CC();
ee.draw();
//AA aa=new AA();
//ee=aa;
//ee.disp(); // 출력안됨 -> 동적 바인딩 시 부모의 레퍼런스로 접근할 수 있는 대상은 부모가 알고 있는 것들만 가능하다. 출력하기 위해선 ee( 추상클래스 )에 추상메소드 abstract void disp();추가해야한다.
}
}
'Java' 카테고리의 다른 글
Interface (0) | 2017.12.29 |
---|---|
추상클래스를 이용한 스택,큐! (0) | 2017.12.29 |
Overridding, 재정의 (0) | 2017.12.29 |
Inheritance exercise(2) (0) | 2017.12.29 |
Inheritance exercise(1) (0) | 2017.12.29 |