기존 클래스의 특성(필드)와 기능(메소드)를 물려받아 새로운 클래스를 구성 하는것.
기존클래스(부모클래스, 슈퍼클래스) 에서 새로운클래스(자식클래스, 서브클래스) 로 상속을 받는걸 말한다.
1. 기존 클래스의 변수와 코드를 재사용 하므로 코드의 중복감소, 클래스가 간결해진다.
2. 먼저 작성된 검증된 프로그램을 재사용 하므로써
신뢰성 있는 프로그램을 손쉽게 개발 할 수 있다.
3. 클래스간 계측적 분류 및 관리 -> 유지보수가 용이
1. 다중상속을 지원하지 않는다.
-> 한 서브클래스는 하나의 슈퍼 클래스만 가질 수 있다.
2. 상속의 횟수에 제한 두지 않음.
-> 자식클래스가 상속받는 부모클래스의 또 다른 부모클래스가 존재 할 수있다.
3. 모든 클래스는 java.lang.Object를 상속 받는다.
-> obeject가 모든 클래스의 최상위 클래스
4. 자식클래스에 작성된 메서드는 부모클래스에서 사용 불가능하다.
자식클래스에서 부모클래스와 같은 메소드를 재정의 하는것, 부모클래스의 메소드의 동작 방법을 변경하는 것(매개변수의 개수, 순서 타입과 반환타입은 같음)(재정의)
매개변수의 개수나 순서, 타입이 다른 같은 이름의 메소드를 여러개 정의하는 것 (중복 정의)
캐스팅이란 타입 변환을 말함.
클래스의 캐스팅은 업캐스팅과 다운 캐스팅이 있다.
하위클래스가 상위클래스 타입으로 자동 타입 변환하는 것
-> oop 특징 중 다형성에 해당한다.
업캐스팅이 된 경우 원래 객체 내 모든 변수, 메소드에 접근 할 수 없고 상위 클래스의 변수, 메소드에만 접근 가능하다.
단, 하위클래스가 상위클래스의 메소드를 오버라이딩 한 경우 하위클래스 메소드 호출이 가능하다.
Student s1 = new Student();
//Person객체를 상속받고있는 하위클래스 객체생성
Person p = (Person)s1 // s1객체를 상위클래스에 업캐스팅을 한다. (Person) 은 생략가능하지만 관행상 명시하는걸 권장.
업캐스팅된 것을 명시적 타입 변환으로 원래 상태로 되돌리는 것
Student p3 = (Student)p;
//업캐스트 된 p를 다시 Student 타입으로 다운캐스팅
//다운캐스팅 같은 경우는 Student를 꼭 명시 해줘야 한다.
업캐스팅한 경우 레퍼런스 변수가 가리키는 실제 객체가 어떤 클래스의 타입인지 구분하기 위한 연산자
Student s1 = new Student();
//Person객체를 상속받고있는 하위클래스 객체생성
Person p = (Person)s1 // s1객체를 상위클래스에 업캐스팅을 한다. (Person) 은 생략가능하지만 관행상 명시하는걸 권장.
System.out.println(p instanceof Student);
// 업캐스팅한 p는 원래 타입이 Student였으니 true값이 나온다.
System.out.println(p instanceof Teacher);
//타입이 Teacher가 아니라서 false가 나온다