** 상속을 금지하는 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++의 템플릿이 아니라 자료구조를 구현한 클래스에 저장할 데이터의 타입을 써넣는 부분이다.