- 접근 지정자
public : 전체
protected : 같은 패키지 또는 상속관계
default : 같은 패키지
private : 같은 클래스 또는 객체클래스 접근 지정자는 default 또는 public 이다.
- Data Transfer Object 클래스
1. 필드의 접근 지정자를 private 로 설정한다.
2. default 생성자가 있어야 한다.
3. 필드에 저장할 모든 값을 전달 받는 생성자가 있어야 한다.
4. 필드에 접근할 수 있는 getter, setter 메소드가 표준에 맞게 작성되어야 한다.
- 상속
- 형식 : public class 자식클래스 extends 부모클래스
- 자식 클래스 객체를 만들 때, 부모 클래스 타입의 객체까지 만들어 자식 클래스 타입 객체 참조값 안에 넣는다.- 객체 생성 순서
1. 부모 클래스 타입 객체
2. 자식 클래스 타입 객체
- extends 하지 않을 경우
Object 클래스를 자동으로 상속 받는다.
Object 클래스 : 모든 클래스의 루트 클래스이다.
- 다형성
상속 관계로 인해 하나의 객체에는 여러개의 타입이 존재하게 된다.
하위 클래스 객체는 상위 클래스 타입 객체에 넣을 수 있다.SmartPhone p1 = new SmartPhone(); Phone p2 = p1; Object p3 = p1;
상위 클래스 객체는 하위 클래스 타입에 넣을 수는 있지만 문제가 발생한다.
// 오류 발생 SmartPhone p1 = new Object(); Phone p2 = p1; Object p3 = p1;
- 해결 방법
상위 클래스 객체를 상위 클래스 타입에 넣으려면 어떻게 할까?
↪ 상위 객체 앞에 cast만 붙여 사용한다.
주의사항 : 처음에 하위 객체를 선언한 후, 더 하위에 있는 타입에 대입하려면 처음부터 객체가 더 하위에 있는 객체로 만들어졌어야 한다.// 오류 발생 : Phone 객체로 만든 인스턴스는 하위 클래스 타입에 대입해도 하위 클래스 context를 사용할 수 없다. Phone p = new Phone(); SmartPhone p3 = (SmartPhone) p; // 정상 : Phone 타입 객체는 SmartPhone 객체를 대입받았기 때문에 이후 SmartPhone 타입에 대입해도 기능 사용에 오류가 없다. Phone p1 = new SmartPhone(); SmartPhone p2 = (SmartPhone) p1;
- Override
형식@Override public void 상위클래스메소드명() { }
사용 목적 : 상위 클래스의 메소드를 다시 정의하여 사용하기 위함이다.
- super
형식public void 클래스명 { super(); // super : 상위 클래스를 의미한다. // this : 객체를 의미한다. }
메소드 : 자식 클래스 객체에서 override한 메소드 대신 부모 클래스의 메소드를 사용하기 위함이다.
생성자 : 자식 클래스 생성자에서 부모 클래스 생성자를 참조할 때 사용한다.