선언부가 일치해야한다
접근 제어자가 상위클래스의 접근 제어자보다 보다 같거나 넓어야 한다
예외는 상위 클래스보다 많이 선언할 수 없다
super
,super()
는 기본적으로 this, this()와 동일한 기능을 수행한다.
super() 메서드 또한 this()와 마찬가지로 생성자 안에서만 사용가능하고, 반드시 첫 줄에 와야 한다.
따라서 클래스를 만들 때는 항상 기본 생성자를 생성하는 것이 좋다.
데이터 보호
내부적으로만 사용되는 데이터에 대한 불필요한 외부 노출을 방지
즉, 외부로부터 객체의 속성과 기능이 함부로 변경되지 못하게 막고, 데이터가 변경되더라도 다른 객체에 영향을 주지 않기에 독립성을 확보할 수 있기에 유지보수와 코드 확장도 쉬워진다.
한 타입의 참조변수를 통해 여러 타입의 객체를 참조할 수 있도록 만든 것을 의미한다.
참조 변수가 사용할 수 있는 멤버의 개수는 실제 객체의 멤버 개수보다 같거나 적어야한다.
따라서, 상위 클래스 타입의 참조 변수로 하위 클래스의 객체를 참조할 수 있다. 반대의 경우는 불가능하다
상속 관계에 있는 클래스 간에는 타입 변환이 가능한데, 하위 클래스를 상위 클래스 타입으로 변환할 때에는 타입 변환 연산자 생략이 가능하지만, 반대의 경우에는 생략이 불가능하다
추상 메서드
: 메서드의 구현부 없이 선언부만 완성된 메서드
추상 클래스
: 추상 메서드를 포함한 클래스
인터페이스는
오직 추상 메서드와 상수만을 멤버로 가질 수 있고 다른 어떤 요소 포함될 수 없다.
인터페이스는 내부의 모든 필드가 public static final로 정의되고, static과 default 메서드 이외의 모든 메서드가 public abstract로 정의되며, 일반적으로 생략 가능하다.
추상 클래스와의 차이점
인터페이스는 상수와 추상 메서드만 가질 수 있기 때문에 추상 클래스와 다르게 멤버 변수를 가질 수 없다.
인터페이스는 다중 상속이 가능하고, 클래스와 인터페이스를 함께 상속받는 것도 가능하다.
다형성과 중복 제거 등 여러가지 장점이 있지만, 핵심은 클래스끼리 연결하는것이 아니라 특정 클래스를 인터페이스로 씌워 인터페이스를 참조하도록 하면,
인터페이스의 구현체가 변경되어도 인터페이스와 연결된 클래스들은 전혀 영향을 받지 않기 때문에 변경 또는 수정이 수월해진다
.
=> 의존성 약화 + 느슨한 결합
중복을 제거해 코드를 간결하게 작성할 수 있고, 유지 보수에 용이하다.
또한, 공통된 속성과 기능임에도 불구하고 각각 다른 변수와 메서드로 정의되는 경우를 미연에 방지할 수 있다.