super는 부모클래스의 멤버(변수, 메서드)에 접근할 때 사용하는 키워드
public class Child extends Parent {
private String familyName = "gim"
public void superExample() {
System.out.println("우리 " + this.familyName + " 가문은 ");
System.out.println("원래 가문의 이름은 " + super.familyName);
}
}
public class Child extends Parent {
...
public Child() {
super();
// 추가로직
}
}
public class Parent {
public Parent() {} // 부모 생성자
}
super()는 항상 생성자의 첫 줄에 위치해야함
부모 클래스의 내용을 물려받아 그대로 재사용 가능
public class Parent {
public String familyName = "김";
public int honor = 10;
public void introduceFamily() {
System.out.println("우리 " + this.familyName + " 가문은 대대로 명성을 이어온...");
}
}
class Child extends Parent {
}
extends를 통해 상속받을 수 있음
public class Main {
public static void main(String[] args) {
Child child = new Child();
System.out.println(child.honor); // 부모의 속성을 물려받아 사용
System.out.println(child.familyName); // 부모의 속성을 물려받아 사용
child.introduceFamily(); // 부모의 메서드를 물려받아 사용
}
}
부모클래스의 기능을 유지하면서 자식클래스에서 기능을 확장할 수 있음 (메서드 추가)
class Child extends Parent {
// 부모에는 없지만 자식에만 있는 기능
public void output() {
System.out.println("출력합니다");
}
}
public class Main {
public static void main(String[] args) {
...
child.showSocialMedia(); // 부모에는 없지만 자식에만 있는 기능
}
}
하위클래스에서 상위클래스의 메서드를 재정의하는것
오버라이딩 조건
- @Override 애노테이션 사용
- 메서드 이름이 같아야함
- 파라미터 타입, 순서, 갯수가 같아야함
- 반환 타입이 같아야함
- 오버라이딩 메서드의 접근제어자가 상위 클래스의 메서드보다 제한적이어선 안됨
- static, final, private 키워드가 붙은 메서드는 오버라이딩 x
- 생성자는 오버라이딩 안됨
공통 기능을 제공하면서 하위 클래스에 특정 메서드 구현을 강제하기 위해 사용
abstract class Animal {
private String name; // 변수선언가능
abstract void eat(); // 추상메서드: 상속 받은 자식은 강제 구현
public void sleep() { // 자식클래스에서 재사용가능
System.out.println("쿨쿨");
}
}
public class Cat extends Animal {
@Override
void eat() {
System.out.println("냠냠"); // 자식클래스에서 강제 구현해야합니다.
}
}
public class Main {
public static void main(String[] args) {
// Animal animal = new Animal(); // 추상클래스는 구현할 수 없음
Cat cat = new Cat();
cat.eat(); // 강제 구현한 메서드 사용
cat.sleep(); // 부모클래스의 매서드 사용
}
}
추상화란?
- 고양이 → 동물 → 생명체
- 추상화란 불필요한 정보를 제거하고 본질적인 특징만 남기는 것을 의미
- 객체지향 프로그래밍에서는 추상화의 계층적 특징을 활용해서 유지보수성이 좋은 프로그램을 만들 수 있음
- 계층구조를 자바의 특징(인터페이스 상속, 클래스 상속)으로 구현할 수 있음
- 추상화의 특징은 다형성에서 활용
