- 상속이란 기존 클래스(부모 클래스, 상위 클래스)의 속성 기능(필드와 메서드)을 새로운 클래스(자식 클래스, 하위 클래스)가 물려받은 것
- 이것을 통해 코드 재사용, 유지보수성, 확장성을 높일 수 있습니다.
//부모 클래스
public class Animal{
String name;
public void eat(){
System.out.println("먹는중...");
}
}
//자식 클래스
public class Dog extends Animal {
public void bark(){
System.out.println("멍멍");
}
}
//사용
public class Main{
public static void main(String[] args) {
Dog dog = new Dog();
dog.name = "바둑이" // 부모로부터 상속된 필드
dog.eat(); // 부모로부터 상속된 메서드
dog.bark(); // 자식 클래스 고유 메서드
}
}
자식 클래스가 부모 클래스의 메서드를 재정의(덮어쓰기) 할 수 있습니다.
public class Dog extends Animal{
@Override
public void eat(){
System.out.println("개밥 먹는 중...");
}
}
- 생성자(constructor)는 상속 되지 않음
- 하지만 자식 클래스의 생성자에서 super()를 통해 부모 생성자를 호출 할 수 있습니다
public class Animal{
public Animal(String name){
System.out.println("Animal 생성자 호출: " + name);
}
}
public class Dog extends Animal {
public Dog(){
super("강아지"); // 부모 생성자 호출
}
}
부모 클래스의 필드나 메서드, 생성자를 호출 할 때 사용합니다.
pubblic class Dog extends Animal { public void printName(){ System.out.println("이름: " + super.name); // 부모 필드 접근 } @Override public void eat(){ super.eat(); // 부모 메서드 호출 System.out.println("강아지가 밥 먹는다"); } }
Animal a = new Dog(); // 부모 타입으로 자식 객체 참조
a.eat(); // 자식 클래스의 오버라이딩 메서드 호출