자식클래스 extends 부모클래스
코드의 중복을 제거할 수 있기 때문에.
Java의 Class는 반드시 적어도 1개의 생성자를 가져야 한다.
만약 생성자가 없으면, 자동으로 non-parameter 생성자를 만들어 준다.
모든 Sub Class 생성자는 모든 Super Class 생성자를 호출한다.
2-1. super(...)를 통해 명시적으로 호출해 주거나
2-2. 그렇지 않을 경우에는 자동으로 no-parameter 생성자가 호출된다.
흔한 오류: Super Class에 no-parameter 생성자가 없는데, 서브클래스의 생성자에서 super(...) 호출을 안해주는 경우
Java에서 private 접근 제한자는 부모 자식간 관계에서, 자식 Class에서는 사용할 수 없다.
protected 는 가능하다.
접근 제한자 | 생성자 | 설명 |
---|---|---|
public | 필드, 메소드 | 모든 패키지에서 아무런 제한없이 필드와 메소드를 사용할 수 있다. |
protected | 필드, 메소드 | 같은 패키지에 속하면서, 해당 클래스의 자식클래스에서 필드와 메소드를 사용할 수 있다. |
default | 필드, 메소드 | 같은 패키지에서 아무런 제한없이 필드와 메소드를 사용할 수 있다. |
private | 필드, 메소드 | 오로지 해당 클래스 내부에서만 사용할 수 있다. |
부모로 부터 받은 method를 자식에서 Overriding 할 수 있다. super 라는 키워드로 중복제거를 하는 것이 우아한 방법이다.
public String toString(){ //자식 클래스에서 Method Overriding 하는 경우
String result = super.toString() + "~" + "~";
return result;
}
Super Class 타입의 변수가 Sub Class 타입의 객체를 참조할 수 있다.
Strong Typing 강력한 예외가 다형성이다.
Super Class의 변수가 Sub Class 객체를 참조 할 수 있기 때문이다.
자바에서는 Sub Class의 메소드를 호출한다.
이 부분에서 더 공부해야 할 부분이 Static binding / Dynamic binding 인데, 이 것은 나중에 자세히 정리하기로 하자.
Object Class는 Java에서 모든 Class의 Super Class이다.
(https://docs.oracle.com/javase/8/docs/api/)
Java의 모든 클래스는 내가 만들어주지 않아도 이미 equals와 toString 메소드를 가지고 있다. 다만 내 의도대로 작동하지는 않을 것이다.
자바의 자료형은 크게 두가지로 나뉜다. Primitive Type은 기본형으로 일반적으로 제공하는 자료형이고 Non-Primitive Type은 오브젝트와 관련된 자료형이다.
정수형(Integeral), 소수(Floating), 논리(Logical), 문자(Texture) 형이 Primitive Type이다.
Object 배열은 모든 종류의 객체 저장 가능하다. 그러나 Primitive 타입은 저장할 수 없다. 객체가 아니기 때문이다. Primitive 타입을 객체로 저장할 때 Wrapper Class를 사용해야 한다. (Integer, Boolean 같은)
Java는 컴파일러가 Auto Boxing을 해주곤 한다.
극단적인 추상클래스라고 하는 것이 이해하기 쉽다.
추상 메소드만을 가진 순수한 추상 Class
자바는 하나의 클래스가 여러개를 extend하는 multiple inheritance를 허용하지 않는데, 여러개의 interface를 implements 하는 것은 허용한다.
제네릭 프로그래밍은 데이터 형식에 의존하지 않고, 하나의 값이 여러 다른 데이터 타입들을 가질 수 있는 기술에 중점을 두어 재사용성을 높일 수 있는 프로그래밍 방식.