B class extends A class
B 클래스는 A클래스의 상속을 받았다
상속받은 클래스의 변수와 메서드를 사용할 수 있다
단, 접근제어지시자 private는 직접 접근할 수 없다
부모클래스에서 받은 메서드를 자식클래스에서 재작성하는 것
polymorphism
상속을 이용
부모 클래스 타입의 변수로 자식 객체를 다룰 수 있는 기술
LgTV lg = new LgTV();
TV tv = new LgTV();
public class Dog extends Animal {
public void hunting() {
System.out.println("사냥");
}
}
Animal을 상속받은 dog와 rabbit클래스가 있을 때
Dog dog1 = new Dog();
dog1.breath(); //Animal의 메서드
dog1.hunting(); //Dog의 메서드
Animal dog2 = new Dog();
// 부모 타입이 가진 것만 사용할 수 있다
dog2.breath(); //upcasting
((Dog)dog2).hunting(); //downcasting
다형성이 적용된 상황에서 overriding을 해도 그대로 적용된다
형제끼리는 불가능 하기 때문에 주의
몸체 {실행부} 없는 메서드를 가진 미완성 클래스
- 미완성 클래스로 객체 생성이 불가하다
- 객체로서의 역할은 못하지만 부모 타입은 가능하다 (다형성 가능)
- 일반적으로 abstract 메서드를 포함한 클래스를 말하지만, abstract 메서드가 없어도 클래스에 abstract 선언이 가능하다
- 추상클래스를 상속한 경우 반드시 추상 메서드를 구현해야 한다 (오버라이딩 강제화)
TestClass1 tc = new TestClass1();
TestClass th2 = new TestClass1();
// 다운캐스팅 없이도 자식클래스 사용할 수 있음
추상클래스는 상속받아 추상 메서드를 완성한 자식 클래스를 사용하기 위해 만든다
상수와 abstract메서드만으로 이루어진 추상클래스 변형체 (클래스X)
접근제어지시자 인터페이스 인터페이스명
인터페이스명+Impl
인터페이스 | 추상클래스 | |
---|---|---|
상속 | 다중상속 | 단일상속 |
상속방법 | implments | extends |
최소 메서드 수 | 모든메서드 | 추상메서드 0개 이상 |
abstract | 묵시적 | 명시적 |
객체생성 | 객체 생성불가 / 타입으로 사용 | 객체 생성불가 / 타입으로 사용 |