다형성은 부모의 타입으로 다양한 형태의 자식 객체를 생성, 참조 할 수 있는 것을 말한다.
Student student = new Student(); // 대신
Person student = new Student(); // 를 사용하면
Person[] people = {new Person(), new Student(), new Teacher(), ...}; // 배열관리를 통해 동일 작업을 쉽게 할수있다.
컴파일 할 때 호출하는 메소드와 실행 할 때 호출하는 메소드가 유동적으로 적용되는 것을 말한다.
student.study();
라는 메소드 호출은 할수 없다.((Student)student).study(); // 해결!
((Teacher)teacher).study(); // 해결!
Student s2 = (Student) student;
s2.study(); // 코드가 실행 가능할까?
인터페이스는 구현되지 않은 메소드로 구성되어 있다.
public interface 인터페이스명 { // 인터페이스 선언
public final static Data_Type 상수명 = 상수의_값; // 상수 선언
public Return_Type 메소드명(파라미터1, 파라미터2, ...); // 추상 메소드 선언
}
인터페이스 내부에 선언하는 변수는 무조건 public final static 이다.
인터페이스 내부에 선언 하는 메소드는 몸체가 없는 추상 메소드이다.
인터페이스를 구현하는 클래스에서 implements를 이용하여 구현
public class 클래스명 implements 인터페이스명 {
// 인터페이스에 선언된 메소드 구현
}
내부 클래스(Inner Class) 란?
public class OuterClass { // 외부 클래스
class InnerClass {} // 내부 클래스
}
내부 클래스의 종류는 선언위치에 따른 종류와 같다. 유효범위와 성징로 변수와 유사하므로 비교해보면 이해하기 쉽다.
인스턴스 클래스
중첩 클래스
지역 클래스
익명 클래스
public class Sum {
interface OnMaxNumListner { // 인터 페이스 정의
void onMaxNumber(int number); // Sum 클래스 내부에 onMaxNumLisnter를 정의한다. 클래스를 따로 정의해도 크게 상관은 없다.
}
void setOnMaxNumListner(OnMaxNumListner listner) { //콜백함수 등록
this.listner = listner;
}
}
public static void main(String[] args) {
OnMaxNumListner listner = new OnMaxNumListner() { // OnMaxNumListner를 구현한 익명 클래스
@Override
public void onMaxNumNumber(int number) {
System.out.println(number);
}
}
Sum sum = new Sum();
sum.setOnMaxNumListner(listner);
}