기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것. ( 객지향의 특징 상속)
• 부모 클래스가 변경되면 자식 클래스는 자동적으로 영향을 받음.
• 자식 클래스는 변경되어도 부모 클래스에 영향이 없다.
• 생성자와 초기화 블럭은 상속되지 않는다.
• 자식클래스의 맴버 계수는 부모 클래스보다 항상 같거나 많다. (extends (확장) )
Obejct 클래스 - 모든 클래스 상속 계층도의 최상위에 있는 조상 클래스. 모든 클래스는 Object 클래스의 자손이다.
접근 제어자 - 클래스, 메소드 및 변수의 가시성과 다른 곳에서의 액세스 가능성을 제어합니다
제어자 같은 클래스 같은 패키지 자손 클래스 전체
public ⭕ ⭕ ⭕ ⭕
protected ⭕ ⭕ ⭕
(default) ⭕ ⭕
private ⭕
기타 한정자 키워드
static - static 키워드는 변수나 메서드가 클래스의 특정 인스턴스가 아닌 클래스 자체에 속함을 나타내는 데 사용됩니다. 클래스의 인스턴스를 만들지 않고 정적 메서드를 호출할 수 있습니다.
final - final은 변수가 초기화 후 변경 될 수 없음, 메서드에 사용되면 오버라이딩을 할 수 없고, 클래스에 사용되면 자식 클래스를 정의하지 못한다는 뜻.
abstract - 클래스 또는 메서드에 사용된다. 추상 클래스는 인스턴스화할 수 없고 다른 클래스에 의해 상속해 구현되는 클래스입니다. 추상 메서드는 추상 클래스에 구현이 없고 구체적인 하위 클래스에 의해 구현됩니다.
native: native는 메서드가 Java 이외의 언어(일반적으로 C 또는 C++)로 구현됨을 나타내는 데 사용됩니다. native 메서드는 시스템 라이브러리와의 인터페이스 또는 성능이 중요한 작업에 사용됩니다.(아직 난 웹 관련에서 사용하는걸 본적은 없음)
synchronized: synchronized는 메서드 또는 코드 블록이 한 번에 하나의 스레드에서만 실행될 수 있음을 나타내는 데 사용됩니다. 이는 다중 스레드 응용 프로그램에서 Thread safe함을 보장합니다.
strictfp: strictfp는 부동 소수점 연산이 IEEE 754 표준을 준수하는 모든 플랫폼에서 동일한 결과를 생성하도록 하는 데 사용됩니다. 클래스, 인터페이스 또는 메서드에 적용할 수 있습니다.
volatile: volatile는 변수와 함께 사용되어 변수 값이 여러 스레드에서 동시에 변경될 수 있음을 나타냅니다. 변수에 대한 변경 사항을 다른 스레드에서 즉시 볼 수 있도록 하여 일종의 동기화를 제공합니다.
transient: transient 키워드는 객체가 직렬화될 때 변수가 직렬화되지 않아야 함을 나타내기 위해 변수와 함께 사용됩니다. 지속되어서는 안 되는 임시 또는 민감한 데이터를 보유하는 변수에 유용합니다.
인터페이스는 추상 클래스보다 한 단계 더 추상화된 클래스라고 볼 수 있다.
인터페이스에 적는 모든 메소드들은 추상 메소드로 간주되기 때문에 abstract를 적지 않는다.
기존에는 인터페이스에 일반 메소드를 구현할 수 없었지만, 자바 8버전부터 default 예약어를 통해 일반 메소드구현이 가능하다.( 이후 private까지 구현 가능)
인터페이스의 필드는 static final field만 가질 수 있다. field를 선언할 때 public static final이 생략되어 있다고 생각하자.
public static final을 사용하는 이유는 다음과 같다
인터페이스도 추상 클래스와 마찬가지로 new 연산자를 사용하여 객체를 생성할 수 없다.
인터페이스는 구현 객체가 같은 동작을 한다는 것을 보장하는 것이 목적이다.
인터페이스는 추상 클래스와 반대로 다중 상속이 가능하다
추상 클래스와 인터페이스의 공통점
추상 메서드와 인터페이스는 선언부만 있고 구현은 없는 클래스이다.(자바 8부터 인터페이스에서 default method로 구현이 가능하지만 일반적으로 구현은 없다.)
인스턴스화(객체 생성 X)를 할 수 없다.
추상 클래스를 extends로 상속받은 자식들과 인터페이스를 implements로 구현한 자식들만 객체 생성 가능 (결국 자식 클래스가 무언가 반드시 구현하도록 위임해야할 때 사용한다.)
추상 클래스(단일 상속) / 인터페이스(다중 상속)
추상 클래스의 목적은 상속을 받아서 기능을 확장시키는 것(부모의 유전자를 물려받는다.). subclass-superclass relationship.
인터페이스의 목적은 구현하는 모든 클래스에 대해 특정한 메소드가 반드시 존재하도록 강제하는 역할 (부모로부터 유전자를 물려받는 것이 아니라(상하의 관계가 아님) 필요에 따라 관계를 맺는것) 즉, 구현 객체가 같은 동작을 한다는 것을 보장하기 위함
추상 클래스와 인터페이스는 모두 미완성 메소드를 포함하는 클래스를 정의하지만, 추상 클래스는 '공통의 기능'을 상위 클래스에 묶어 상속을 통해 공유하는 데 사용되고, 인터페이스는 '객체의 행동'을 정의하는 데 사용된다는 차이점이 있습니다. 또한, 추상 클래스는 다중 상속이 불가능하지만, 인터페이스는 다중 구현이 가능하다는 차이점도 있습니다.