abstract 키워드


1. abstract (추상적)은 실제 코드가 존재하지 않지만 개념만 존재하는 멤버를 가지고 있는 상태.

추상: 여러가지 사물이나 개념에서 공통되는 특성이 속성따위를 추출하여 파악하는 작용

<=반댓말=>

구상: 사물, 특히 예술작품 따위가 직접 경험하거나 지각할 수 있도록 일정한 형태와 성질을 갖춤.




2. 멤버중 abstract인 메소드를 가지고 있는 클래스를 abstract 클래스라고 한다.

public abstract class 클래스명 {  //추상 클래스


접근지정자 반환자료형 메소드명() {

//실행문;

}


접근지정자 abstract 반환자료형 메소드명(매개변수 리스트);

접근지정자 abstract 반환자료형 메소드명(매개변수 리스트);


}



3. abstract 멤버는 상속 받은 서브 클래스에서 반드시 오버라이딩 하도록 강제하는 역할.

4. abstract 클래스는 객체 생성 불가.

   abstract 클래스에서 abstract이 아닌 일반 멤버는 서브 클래스에서 상속받은 후 객체 생성을 하고 멤버 접근.


//Class50.java







추상 클래스를 이용한 정렬 프로그램

- Arrays.sort() 메소드에 대한 사용자 정의


//SuperSort.java -> 수퍼클래스. 추상클래스로 구현

//SubSort.java -> SuperSort 클래스를 상속받을 서브 클래스

//Class51.java -> main() 메소드 포함







final 키워드

1. 클래스에 final 사용시 -> 상속 불가 클래스

2. 메소드에 final 사용시 -> 오버라이딩 불가 메소드

3. 멤버변수에 final 사용시 -> 초기값 외에 값 재지정 불가 변수 -> 상수(constant)


//Class52.java






interface 키워드


1. interface는 클래스의 템플릿(template) 기능을 수행하는 추상 전용 클래스.

    템플릿 : 어떤 도식이나 서식에서 자주 사용되는 기본 골격.

2. class 키워드 대신 interface 키워드 사용.

3. interface의 멤버는 

멤버변수인 경우 public final static 이며

메소드인 경우 public abstract 이다.

(코딩 생략가능)

4. interface는 수퍼클래스로만 사용 가능하며, 다중 상속을 허용한다. 상속 표현시 extends 대신 implements 키워드 사용.

5. 형식

interface 인터페이스명 {

자료형 멤버변수명 = 초기값;      //public final static 이 앞에 생략되어 있는 상태. 주로, 변수명은 대문자로 표기

반환자료형 메소드명();  //public abstract 이 앞에 생략되어 있는 상태.

}


class 클래스명 implements 인터페이스명 {

@Override

반환자료형 메소드명() { // 상속받은 추상클래스 내 추상 메소드는 필수로 오버라이딩.

}

}



//Class53.java







참조형 변수의 형 변환


1. 참조형 변수의 형 변환은 상속 관계에 있는 수퍼, 서브 클래스 간에서만 형변환이 가능하다.

2. 서브 클래스 객체를 수퍼 클래스 자료형 변수에 저장하는 경우는 묵시적으로 가능. -> 업캐스팅

수퍼클래스명 변수1 = new 서브클래스명();


3. 수퍼 클래스 자료형 변수에 저장된 서브 클래스 객체를 다시 원래의 자료형으로 되돌려야 할때는 명시적으로만 가능. -> 다운캐스팅

서브클래스명 변수2 = new (서브클래스명)변수1;



//Class54.java



//Class55.java







중첩 클래스


1. 클래스 선언 내부에 클래스 선언이 되는 경우 중첩 클래스라고 함.

2. static nested class, inner class, local class, anonymous class


◆ static nested class

- 형태 

접근지정자 class 외부 클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 static class 내부 클래스명{  //자기 자신도 스택틱 멤버임

//외부 클래스의 스태틱 멤버 접근 가능.

}

}


- static으로 선언된 내부 클래스이다.

- 중첩 클래스의 객체는 중첩 클래스를 포함하고 있는 외부 클래스의 객체와 동일하다.

- 외부 클래스의 클래스 변수와 클래스 메소드는 바로 접근하여 사용가능하다.

- 중첩 클래스와 중첩 클래스를 포함하고 있는 외부 클래스의 인스턴스 변수와 인스턴스 메소드는

  객체를 생성해서 서로 접근이 가능하다.

- 중첩 클래스를 외부에서 단독으로 접근 가능하다.


//Class56.java




◆ inner class

- 형태 

접근지정자 class 외부 클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 class 내부 클래스명{ //자기 자신도 인스턴스 멤버임


}

}


- static 키워드가 없는 내부 클래스

- 내부 클래스 내부에 스태틱 멤버를 가질 수 없다.

- 외부클래스의 멤버 참조시 외부클래스명.this 키워드 사용.


//Class57.java



◆ local class

- 형태 

class 외부클래스명 {


//인스턴스 멤버

//스태틱 멤버


접근지정자 반환자료형 메소드명 (매개변수 리스트){


//지역 변수


//자기 자신이 지역 변수와 같은 멤버이다.

class 로컬클래스명{

//멤버

}


로컬클래스명 변수 = new 로컬 클래스명();

변수.멤버명();

}

}


- 메소드 내부에서 선언된 클래스

- 접근지정자는 붙일 수 없다.

- 로컬클래스의 객체 활동 범위는 메소드 내부에서만 가능.



//Class58.java




◆ anonymous class (익명 클래스)

- 형태 

class 외부클래스명 {

접근지정자 반환자료형 메소드명() {

return new 상위클래스명() {

//오버라이딩 메소드만 구현 가능

};

}

}


//Class59.java



WRITTEN BY
빨강꼬마

,