1️⃣ 인터페이스 (Interface)
인터페이스는 클래스에 대한 약속을 정의합니다.
클래스가 해당 인터페이스를 구현하면 인터페이스에 정의된 모든 메서드를 반드시 구현해야 합니다.
// 인터페이스 정의
interface Animal {
void sound(); // 추상 메서드
}
// 인터페이스 구현
class Dog implements Animal {
public void sound() {
System.out.println("Woof"); // 추상 메서드 구현
}
}
2️⃣ 추상 클래스 (Abstract Class)
추상 클래스는 일부 메서드가 구현되어 있고, 일부는 추상 메서드로 선언되어 있습니다.
추상 메서드는 하위 클래스에서 반드시 구현되어야 합니다.
// 추상 클래스 정의
abstract class Shape {
abstract void draw(); // 추상 메서드
void display() {
System.out.println("Displaying shape..."); // 구현된 메서드
}
}
// 추상 클래스를 확장한 구현 클래스
class Rectangle extends Shape {
void draw() {
System.out.println("Drawing rectangle"); // 추상 메서드 구현
}
}
3️⃣ 상속
상속은 클래스 간의 상속 관계를 나타냅니다. 하위 클래스는 상위 클래스의 속성과 메서드를 상속받습니다.
// 상위 클래스 정의
class Animal {
void sound() {
System.out.println("Animal makes a sound"); // 구현된 메서드
}
}
// 상위 클래스를 확장한 하위 클래스
class Dog extends Animal {
void sound() {
System.out.println("Dog barks"); // 상위 클래스의 메서드 재정의
}
}
@Override 예시)
// 부모 클래스 정의
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
// 자식 클래스 정의
class Dog extends Animal {
// 부모 클래스의 sound() 메서드를 오버라이딩
@Override
void sound() {
System.out.println("Dog barks");
}
}
// 사용 예시
public class Main {
public static void main(String[] args) {
Animal animal = new Dog(); // 다형성을 이용하여 Dog 클래스의 객체 생성
animal.sound(); // Dog 클래스의 sound() 메서드 호출
}
}
👀 한 눈에 알아보기
인터페이스 | 추상 클래스 | 상속 | |
부모 클래스 | interface A | abstract class A | class A |
자식 클래스 | class B implements A | class B extends A | class B extends A |
인스턴스화 | 직접적으로 인스턴스화될 수 없음 | 직접적으로 인스턴스화될 수 없음 | 가능 |
메서드 | 모든 메서드는 추상 메서드 | 일부가 추상 메서드 일부는 구현된 메서드 |
부모 클래스의 메서드 하위 클래스에서 사용 및 재정의 |
목적 | 클래스 간의 관계를 강제함 | 추상적인 클래스를 제공함 | 코드 재사용 및 확장을 위해 상속함 |
상속 | 다중 상속 | 단일 상속 | 단일 상속 |
예시 | GUI 이벤트 리스너, Comparable 인터페이스 |
도형(Shape), 동물(Animal) 추상 클래스 |
동물(Animal) 클래스를 확장한 개(Dog) 클래스 |
인스턴스화?
클래스를 기반으로하여 실제로 메모리에 객체를 생성하는 과정
ex) 자동차의 속성만 가지고 도로에서 움직이는 자동차가 될 수 없으므로 자동차를 실제 객체화해서 만드는 것을 의미
추상 메서드?
메서드 시그니처만 정의하고 구현 내용을 포함하지 않는 메서드
추상클래스 특징
- 구현이 없음
- 하위 클래스에서 구현
'Language > JAVA' 카테고리의 다른 글
빌드 과정 (1) | 2025.01.15 |
---|---|
[JAVA 함수] split(), join() 문자 바꾸기 (0) | 2024.06.17 |
[JAVA 기초 이론] 인터페이스 interface (0) | 2024.02.20 |
객체지향 프로그램(OOP)의 특성 (0) | 2023.05.26 |
[JAVA 기초 이론] MVC패턴 (0) | 2023.05.24 |