JAVA2009. 8. 12. 10:28
** 상속을 금지하는 final 키워드
final class Account {
 ...
}
위 Account class는 상속이 불가하다.

** final키워드를 메소드에 기입하면 메소드 오버라이딩이 금지된다.

** abstract class는 인스턴스화할수 없다.

** class의 일부 메소드를 본체가 필요없을 때 abstract로 선언할 수 있으며 상속되는 클래스에서 해당 메소드를 구현하게 된다. 이러한 이유로 서브클래스는 반드시 해당 메소드를 구현해야 합니다.

** 인터페이스는 클래스들의 공통기능만 표현할 수 있고 공통데이터는 표현할 수 없다. 

** 인터페이스는 클래스들의 공통된 행위기반의 기능들을 별도로 모아서 표현할 때 사용된다.
** 인터페이스는 클래스들에서 실제로 구현된다.
interface Lendable {
  abstract void checkOut(String aborrower, String date);
  absract void checkIn();
}


** 인터페이스 변수의 다형성
  인터페이스 변수에는 그 인터페이스를 구현하는 클래스의 객체라면 어떤 객체든지 다 대입할수 있다.
  Lendable obj;
  obj = new SeparatedVolume("lkajf ", "ant", "berber");
  obj.checkOut();
  obj = new AppCDInfo("393-19", "samse track");
  obj.checkOut();

** 인터페이스에 인스턴스필드는 성언불가하나 상수는 선언 가능하다.
** 인터페이스를 구현하는 메소드에서 익셉션을 발생하도록 하려면 인터페이스의 메소드 선언시 throws Exception을 기술하여야 한다.
interface Lendable {
  abstract void checkOut(String aborrower, String date) thorws Exception;
  absract void checkIn();
}

** 인터페이스의 상속
  인터페이스끼리도 상속이 가능하다.

interface Movable {
  void moveTo(int x, int y);
  void moveBy(int xOffset, int yOffset);
}

interface Transformable extends Movable {
  void resize(int width, int height);
}

다중상속도 가능하다.
interface Resizable {
  void resize(int width, int height);
}
interface Colorable {
  void setForground(String color);
  void setBackground(String color);
}
interface Changable extends Resizable, Colorable {
  void setFont(String font);
}

** 클래스변수에는 그 클래스의 객체와 서브클래스의 객체를 대입할 수 있다.
** 인터페이스변수에는 그 인터페이스를 직접 또는 간접적으로 구현하는 클래스의 객체를 대입할 수 잇다.
  interface Colorable  --> interface Changable extends Colorable  --> class Circle implements Changable
                              --> class PlainText implements Colorable --> class CompoundText extends PlainText
  Colorable변수에 Circle, PlainText, CompoundText 클래스객체를 대입할수 있다. 

** 레퍼런스타입의 캐스트 연산자는 객체의 타입을 바꾸는 것이 아니라 객체를 그 타입의 변수에 대입할 수 있다는 사실을 보증할 뿐이다.
  Account obj1 = new CheckingAccount( ...);
  CheckingAccount obj2 = (CheckingAccount)obj1;
  obj2.pay(..);

** 캐스트가능성을 검사하는 instanceo 연산자
  obj객체를 CheckingAccount로 캐스팅이 가능한지 확인하는 코드는 아래와 같다.
  obj instanceof CheckingAccount
   a         b                  c
  a : 검사할 객체
  b : 자바 키워드
  c : 검사할 타입이름

** 열거타입은 상수리스트를 갖는 클래스이다.
  enum Season { SPRING, SUMMER, FALL, WINTER }
** 열거타입은 기본적으로 values()와 valueOf()메소드를 가지고 있다.
  values()는 열거상수들을 모두 배열에 답아서 리턴한다.
    Season seasons[] = Season.values();
  valueOf()는 열거상수의 이름을 문자열로 넘겨주면 그에 해당하는 상수를 리턴해준다.
    Season season = Season.valueOf("SPRING");

** <E>, <K,V>로 표시된 문법은 C++의 템플릿이 아니라 자료구조를 구현한 클래스에 저장할 데이터의 타입을 써넣는 부분이다.



Posted by 삼스