추상 클래스
추상 클래스는 자식 클래스들이 특정 메서드를 재정의하여 각자의 구현을 제공하는 상황에서 유용합니다. 이 경우, 부모 클래스는 구체적인 구현 없이 메서드 선언만 제공하며, 이를 추상 메서드라고 합니다.
public abstract class Animal {
public abstract void move();
}
추상 클래스 사용 예제
abstract class Employee {
private String id;
private String name;
private double salary;
public Employee() {}
public Employee(String id, String name, double salary) {
this.id = id;
this.name = name;
this.salary = salary;
}
abstract public void work();
}
class Manager extends Employee {
@Override
public void work() {
System.out.println("팀 관리");
}
}
인터페이스
인터페이스는 추상 클래스보다 더 완전한 추상화를 제공하며, 모든 메서드가 기본적으로 추상 메서드입니다.
public interface SportMan {
void run();
void obeyLaw();
String compete(String event);
}
인터페이스 구현 예제
public class SoccerPlayer implements SportMan {
@Override
public void run() {
System.out.println("축구선수는 빠르게 달린다.");
}
@Override
public void obeyLaw() {
System.out.println("법을 준수한다.");
}
@Override
public String compete(String event) {
return "참가: " + event + ", 금메달 획득!";
}
}
내부 클래스
내부 클래스는 다른 클래스 내에 정의된 클래스로, 외부 클래스와 강한 연관성을 가집니다. 내부 클래스는 멤버 내부 클래스, 정적 내부 클래스, 지역 내부 클래스, 익명 내부 클래스로 분류됩니다.
멤버 내부 클래스 예제
class Outer {
class Inner {
void display() {
System.out.println("내부 클래스 메서드 호출");
}
}
}
public class Test {
public static void main(String[] args) {
Outer outer = new Outer();
Outer.Inner inner = outer.new Inner();
inner.display();
}
}
익명 내부 클래스 예제
interface Swim {
void swim();
}
public class Demo {
public static void main(String[] args) {
Swim swimmer = new Swim() {
@Override
public void swim() {
System.out.println("익명 클래스로 스위밍 실행");
}
};
swimmer.swim();
}
}