- 부모로 부터 자식에게 상속
- 부모클래스(super class)의 멤버들을 자식클래스(child class)에서 자기가 선언한 것 처럼 사용하려 하는것
- 재사용성
- 클래스간의 공통요소(멤버)가 있다면 공통요소를 부모클래스로 작성 후 자식 클래스가 상속(확장) 해서 사용
- java는 단일 상속 만 허용
1. 공통요소를 재활용(추상화)
2. class 간의 관계를 설정
3. 생성자는 제외
상속 사용법
public class 자식클래스명 extends 부모클래스명 {}
public class SuperClass{}
public class ChildClass extends SuperClass{}
- 수직 관계만 관계 설정
- 수평은 관계가 없다
참조변수 super, super()
- 상속 보다는 확장의 개념
- 자식클래스의 객체를 생성 할 때 부모 객체를 생성하고 부모 객체를 확장해서 자신의 객체를 생성
1. super()
- 자식의 생성자 내에서 사용
- 부모의 생성자를 호출, 생략 가능
- 생성자에 첫줄에 위치, this() super()를 같이 쓸 수 없음
2. 참조변수 super
- 부모객체의 주소를 담고 있는 참조변수
- 부모의 멤버변수, 멤버메서드 사용
추상클래스와 추상메서드
1. 추상클래스
- 완성 되지 않은 클래스
- 객체 생성 X
- 상속(확장) 해서 완성 시켜서 사용
- 데이터타입으로 선언은 가능
- 일반(구현) 클래스 처럼 멤버변수, 멤버메서드, 생성자, 추상메서드를 가질 수 있음
- 클래스 내에 한 개 이상의 추상 메서드가 있으면 해당 클래스는 추상 클래스 선언
접근지정자 abstract 클래스명 {}
2. 추상 메서드
- 완성 되지 않은 메서드
- 메서드의 선언부(header) 만 있는 메서드
접근지정자 abstract 메서드명() ;
오버라이딩(OverRiding)
- 상속 받은 부모의 메서드를 자기 자신에 맞게 내용을 재정의 하는것
- 메서드의 선언부는 동일하게 선언(수정 X)
- 단, 접근지정자는 범위가 같거나 더 넓게 수정 가능
인터페이스 (Interface)
- 추상 클래스와 비슷
- 추상 클래스 보다 더 추상화가 심한 것
- 일종의 추상 클래스
- 상수와 추상메서드를 멤버로 가짐
- 객체 생성 (X)
- 구현(implements) 해서 오버라이딩
- 메서드 이름의 표준화
- 관계가 없는 클래스간에 관계를 맺어 줄 때 사용
- 인터페이스는 다른 인터페이스를 상속 가능
- 인터페이스 구현은 다중 구현 이 가능
1. 인터페이스 선언
public interface 인터페이스명 extends 상속받을 인터페이스명 {
//상수
public static final 데이터타입 변수명
//추상메서드
//접근지정자는 무조건 public abstract
public abstract 리턴타입 메서드명([매개변수 선언]);
//public이나 abstract은 생략 가능
public abstract void t1();
int t2(String name); //public abstract int t2(String name);
public void t3(); //public abstract void t3();
abstract void t4(); //public abstract void t4();
// java 8 이후 추가
//default
//default로 선언하면 메서드의 body를 작성 할 수 있다.
//구현 클래스에서 오버라이딩 하지 않고 바로 사용 가능
//구현 클래스에서 오버라이딩 해서 사용 가능
default int t5(int a, int b){
return a*b;
}
//static
//static으로 선언 하면 메서드의 body를 작성 할 수 있다.
// 호출은 클래스메서드와 마찬가지로 Interface명.메서드명()으로 사용 가능
static void t6(){
System.out.println("static");
}
}
- 인터페이스의 이름은 클래스와 같이 첫글자는 대문자로
2. 구현 클래스에서 인터페이스 구현
public class 클래스명 implements 인터페이스명1, 인터페이스명2,...{
}
다른 클래스의 멤버를 내가 선언한 멤버처럼 사용하고 싶을 때