13. final keyword
- field 앞에 final이 올 경우 : 해당 field의 값을 변경할 수 없다. (상수로 사용)
- method 앞에 final이 올 경우 : 하위 class에서 해당 method를 overriding 할 수 없다.
- class 앞에 final이 올 경우 : 해당 class를 아예 상속할 수 없다.
14. abstract class(추상 클래스)
- abstract method를 1개 이상을 보유하고 있는 class는 반드시 abstract class로 지정해야 한다.
- 가장 큰 특징은 아직 완성되지 않은 class이기 때문에 instance 생성이 안된다.
- 사용 방법 : 추상 클래스를 상속받는 하위 클래스를 만들어서 추상 method를 overriding해서 사용하면 된다.
- 재활용성의 폭이 넓혀진다.
package test;
public abstract class TestA {
private int age;
private String name;
public TestA() {
}
public TestA(int age, String name) {
super();
this.age = age;
this.name = name;
}
public void myFunc() {
}
public abstract void sayHello();
}
class MySubClass extends TestA {
@Override
public void sayHello() {
}
}
15. interface(인터페이스)
- class와 유사함. class의 아주 특별한 형태
- interface는 class 대용으로 사용한다. (특수한 경우)
- interface 안에 method가 있을 수 있다. (추상 method만 나올 수 있다.)
- 그렇기 때문에 일반적으로 public abstract는 생략해서 구현한다.
- interface 안에 field도 나올 수 있다. (상수만 사용할 수 있다.)
- 특성 상 당연히 public static으로 잡혀야 하며, 상수로 만들어야 해서 final을 사용한다.
- 그래서 public static final은 생략이 가능하다.
- 하위 클래스에서 상위 클래스를 ~~ 한다.
- 하위 class에서 interface를 구현해서 사용하면 된다.
- 하나의 인터페이스를 확장된 인터페이스를 만들려면 extends를 쓴다.
- 하나의 인터페이스를 구현하려면 implements를 쓴다.
- class의 확장과 다르게 interface는 다중 구현이 가능하다.
- is-a relation 관계가 당연히 성립한다.
package test;
public interface MyInterface {
int MY_NUM = 100;
void myFunc();
}
class MyClass1 implements MyInterface {
@Override
public void myFunc() {
}
}