public : public 접근 제한은 모든 패키지에서 아무런 제한 없이 생성자를 호출할 수 있도록 합니다.
protected : protected 접근 제한은 default 접근 제한과 마찬가지로 같은 패키지에 속하는 클래스에서 생성자를 호출할 수 있도록 합니다. 차이점으로 다른 패키지에 속한 클래스가 해당 클래스의 자식(child) 클래스라면 생성자를 호출할 수 있습니다.
default : 접근 제한자를 사용하지 않으면 같은 패키지에서는 아무런 제한 없이 생성자를 호출할 수 있으나, 다른 패키지에서는 생성자를 호출할 수 없도록 합니다.
private : private 접근 제한은 동일한 패키지이건 다른 패키지이건 상관없이 생성자를 호출하지 못하도록 제한합니다. 오로지 클래스 내부에서만 생성자를 호출할 수 있고 객체를 만들 수 있습니다.
Customer vc = new VIPCustomer();
//상위 하위
//VIPCustomer() 생성자의 호출로 인스턴스는 모두 생성 되었지만
//타입이 Customer 이므로 접근 할 수 있는 변수나 메서드는 Customer의 변수와 메서드 임
상위 클래스에 정의 된 메서드 중 하위 클래스와 기능이 맞지 않거나 추가 기능이 필요한 경우 같은 이름과 매개변수로 하위 클래스에서 재정의 함
(메소드 이름, 매개 변수, 리턴 값이 모두 같아야한다.)
overload : 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면, 같은 이름을 사용해서 메소드를 정의할 수 있다.
(리턴 값만 다른 것은 오버로딩 할 수 없다.)
묵시적 형 변환이 되면 재정의 된 메서드 호출
extends
부모에서 선언 / 정의를 모두하며 자식은 메소드 / 변수를 그대로 사용할 수 있음
implements (interface 구현)
부모 객체는 선언만 하며 정의(내용)은 자식에서 오버라이딩 (재정의) 해서 사용해야함
abstract
extends와 interface 혼합. extends하되 몇 개는 추상 메소드로 구현되어 있음
List
인터페이스
ArrayList
클래스