추상클래스

2019. 8. 14. 14:45프로그래밍/Java

1. 추상 메소드 하나 이상 가지고 있는 클래스

 

 

this자기자신에게 접근하는

super부모에게 접근하는

 

상속...is a관계

is like a 관계xx

 

큰 개념에서 작은개념으로 내려가면서 구체화시킴---> 이게 어려움

 

정적바인딩: 내 객체를 만들어서 내거에 접근

동적바인딩:

부모의 레퍼런스로 자식에게 접근 (거꾸로)

동적바인딩을 쓰기위해 항상 부모가 공통적인 내용이 있어야함.

하나의 이름으로 여러 객체에 접근 가능

대신 바인딩을 해줘야함

 

/*추상 클래스
 * 1. 추상 메소드 하나 이상 가지고 있는 클래스
 * 2. 추상메소드는 함수선언만 되어있는 메소드
 * 3. 추상메소드는 강제성을 부여한다.
 * 
 * 
 * 부모클래스는 서브클래스의 공통된 사항을 가지고있음
 * 
 * 
 * super() 
 *  : 항상 subclass의 생성자 첫번째 라인에 항상 존재(default 생략)
 *  : 부모의 생성자를 호출해서 부모 객체를등록해준다
 *  : 명시적으로 호출할경우에는 부모의 생성자를선택할 수 있다.
 * 
 */


package 추상클래스;

class AA{
	public AA() { //2번 그래서 동작함
		System.out.println("AA 생성자");
	}
	public AA(int num) {
		System.out.println(num);
	}
	public void disp() {
		System.out.println("AA");
	}
}

public class AbsTest extends AA{
	//생성자만들기
	public AbsTest() { //1번 AA를 상속받고있네?
		super(900);//super();// 항상 super() 호출이 존재하고있다. 부모의 생성자 슈퍼 호출은 무조건 생성자의 첫번째줄에 와야함
		System.out.println("Me");
		
		
	}
	public static void main(String[] args) {
		AbsTest at = new AbsTest();   // 최초  여기서 AbsTest로 가고
		//at.disp();

	}

}

 

/*추상 클래스
 * 1. 추상 메소드 하나 이상 가지고 있는 클래스
 * 2. 추상메소드는 함수선언만 되어있는 메소드
 * 3. 추상메소드는 강제성을 부여한다.
 * 4. 오직 상속을 목적으로 사용한다.(익명클래스, annoymous, inner class)
 * 5. 객체를 생성할 수 없고 상속받은 하위클래스도 추상클래스화 된다.
 *    그래서 , 객체를 생성하고 싶으면 하위클래스에서 추상메소드는 무조건 오버라이드를 제공해야한다.
 * 
 * 부모클래스는 서브클래스의 공통된 사항을 가지고있음
 * 
 * 
 * super() 
 *  : 항상 subclass의 생성자 첫번째 라인에 항상 존재(default 생략)
 *  : 부모의 생성자를 호출해서 부모 객체를등록해준다
 *  : 명시적으로 호출할경우에는 부모의 생성자를선택할 수 있다.
 * 
 */




package 추상클래스;

abstract class AA{		//추상클래스
	
	public abstract void disp(); //추상메소드
}

public  class AbsTest extends AA{
	

	@Override     //명시하는게 좋음
	public void disp() {
		System.out.println("오버라이드 함수");
		
	}
	public static void main(String[] args) {
		
		//정적바인딩 방식
		//AbsTest abs = new AbsTest();
		//abs.disp();
	}
	
	
}
/*추상 클래스
 * 1. 추상 메소드 하나 이상 가지고 있는 클래스
 * 2. 추상메소드는 함수선언만 되어있는 메소드
 * 3. 추상메소드는 강제성을 부여한다.
 * 4. 오직 상속을 목적으로 사용한다.(익명클래스, annoymous, inner class)
 * 5. 객체를 생성할 수 없고 상속받은 하위클래스도 추상클래스화 된다.
 *    그래서 , 객체를 생성하고 싶으면 하위클래스에서 추상메소드는 무조건 오버라이드를 제공해야한다.
 * 
 * 부모클래스는 서브클래스의 공통된 사항을 가지고있음
 * 
 * 
 * super() 
 *  : 항상 subclass의 생성자 첫번째 라인에 항상 존재(default 생략)
 *  : 부모의 생성자를 호출해서 부모 객체를등록해준다
 *  : 명시적으로 호출할경우에는 부모의 생성자를선택할 수 있다.
 * 
 */

/*
 * 동적바인딩
 * 1. 부모의 레퍼런스 자식의 객체를 접근하는 방식
 * 2. 부모가 인식하고 있는 멤버들만 접근이 가능하다.
 *    즉, 자식만 존재하고 있는 멤버는 접근이 허용이 되지 않는다.
 * */


package 추상클래스;

abstract class AA{		//추상클래스
	
	public abstract void disp(); //추상메소드
	
}

public  class AbsTest extends AA{
	

	@Override     //명시하는게 좋음
	public void disp() {
		System.out.println("오버라이드 함수");
		
	}
	public void disp2() {
		System.out.println("sub class");
	}
	public static void main(String[] args) {
		
		//동적바인딩
		AbsTest abs = new AbsTest();
		abs.disp();
		abs.disp2();
		
		AA aa = abs;
		aa.disp();
		//aa.disp2();  //부모가 모르니깐 에러가 생김
	}
	
	
}

'프로그래밍 > Java' 카테고리의 다른 글

8_15  (0) 2019.08.15
interface  (0) 2019.08.14
interface  (0) 2019.08.14
2일차_배열  (0) 2019.08.13
2일차  (0) 2019.08.13