상속의 사전적 정의는 부모가 자식에게 물려주는 행위
1) 상속
public class 자식클래스 extends 부모클래스 {
}

2) 클래스간의 관계
3) 단일 상속과 다중 상속
Java는 다중상속을 허용 XXXXXX
public final class Car {}
...
public class SportsCar extends Car{} // 오류가 발생합니다.
클래스에 final 키워드를 지정하여 선언하면 상속할 수 없는 최종적인 클래스가 된다.
public class Car {
public final void horn() {
System.out.println("빵빵");
}
}
...
public class SportsCar extends Car{
public void horn() { // 오류가 발생합니다.
super.horn();
}
}
메서드에 final 키워드를 지정하여 선언하면 오버라이딩 할 수 없는 최종적인 메서드가 된다.
5) Object
Object 는 말그대로 “객체”를 의미하는 단어이며 보통, Object 클래스를 의미
- Object **clone()** : 해당 객체의 복제본을 생성하여 반환함.
- boolean **equals(Object object)** : 해당 객체와 전달받은 객체가 같은지 여부를 반환함.
- Class **getClass()** : 해당 객체의 클래스 타입을 반환함.
- int **hashCode()** : 자바에서 객체를 식별하는 정수값인 해시 코드를 반환함.
- String **toString()** : 해당 객체의 정보를 문자열
로 반환함. & Object 클래스에서는 클래스이름 @해쉬코드값 리턴함.
- …
1) 오버라이딩
부모 클래스로부터 상속받은 메서드의 내용을 재정의 하는 것
2) super
super는 부모 클래스의 멤버를 참조할 수 있는 키워드
3) super()
super(…)는 부모 클래스의 생성자를 호출할 수 있는 키워드
@ 자동 타입변환
@ 강제 타입변환
Mammal mammal = new Whale();
mammal.feeding();
// 자식객체 고래의 수영 기능을 사용하고 싶다면
// 다시 자식타입으로 강제 타입변환을 하면된다.
Whale whale = (Whale) mammal;
whale.swimming();
2) 다형성이란?
다형성이란 ‘여러 가지 형태를 가질 수 있는 능력’을 의미
Tire tire = new HankookTire("HANKOOK");
Tire tire = new KiaTire("KIA");
public Car(Tire tire) {
this.tire = tire;
}
...
Car car1 = new Car(new KiaTire("KIA"));
Car car2 = new Car(new HankookTire("HANKOOK"));
Tire getHankookTire() {
return new HankookTire("HANKOOK");
}
Tire getKiaTire() {
return new KiaTire("KIA");
}
...
Tire hankookTire = car1.getHankookTire();
KiaTire kiaTire = (KiaTire) car2.getKiaTire();
3) instanceof
다형성 기능으로 인해 해당 클래스 객체의 원래 클래스명을 체크하는것이 필요한데 이때 사용할 수 있는 명령어가 instance of
1) 추상 클래스
클래스가 설계도라면 추상 클래스는 미완성된 설계도이다.
abstract 키워드를 사용하여 추상 클래스 선언
public abstract class 추상클래스명 {
}
2) 추상 메서드
추상 메서드는 아직 구현되지 않은 미완성된 메서드이다.
abstract 키워드를 사용하여 추상 메서드를 선언
public abstract class 추상클래스명 {
abstract 리턴타입 메서드이름(매개변수, ...);
}
3) 추상 클래스 상속
추상 메서드는 extends 키워드를 사용하여 클래스에서 상속
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
1) 인터페이스 선언
public interface 인터페이스명 {
}
2) 인터페이스 구성
public interface 인터페이스명 {
public static final char A = 'A';
static char B = 'B';
final char C = 'C';
char D = 'D';
void turnOn(); // public abstract void turnOn();
}
3) 인터페이스 구현
인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없기 때문에 클래스에 구현되어 생성
public class 클래스명 implements 인터페이스명 {
// 추상 메서드 오버라이딩
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
4) 인터페이스 상속
1) 디폴트 메서드
2) static 메서드
1) 타입변환
@ 자동타입변환
인터페이스 변수 = 구현 객체; // 자동타입변환
public class Main {
public static void main(String[] args) {
// A 인터페이스에 구현체 B 대입
A a1 = new B();
// A 인터페이스에 구편체 B를 상속받은 C 대입
A a2 = new C();
}
}
interface A { }
class B implements A {}
class C extends B {}
@ 강제타입변환
인터페이스 타입을 자동 타입 변환 후, 다시 구현 클래스 타입으로 변환
2) 인터페이스의 다형성