프로그램에서는 자식이 부모를 선택한다.!
자식 클래스를 선언할때 어떤부모 클래스를 상속받을 것인지를 결정하고 선택된 부모 클래스는 다음과 같이 extends 뒤에 기술한다.
Class 자식 클래스 extends 부모 클래스 {
//필드
//생성자
//메소드
}
예를 들어 Car 클래스를 상속해서 SportsCar 클래스를 설꼐하고 싶다면 다음과 같이 작성하면 된다.
class SportsCar extends Car{
}
다른 언어와는 달리 자바는 다중 상속을 허용하지 않는다. 즉 부모클래스가 무조건 하나만 와야한다.
부모 생성자 호출
현실에서 부모 없는 자식이 있을 수 있듯이 자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생성되고 자식개체가 그다음에 생성된다.
부모클래스 생성 - 자식 클래스 생성
모든 객체는 클래스의 생성자를 호출해야만 한다.
오버라이딩
부모클래스에서 생성된 생성자는 자식클래스에서 바꿀수있다.
부모클래스에서 쓰는 생성자는 자식클래스에서도 그대로 써준다.
부모 메소드 호출(super)
자식 클래스에서 부모 클래스의 메소드를 오버라이딩 하게 되면, 부모 클래스의 메소드는 숨겨지고 오버라이딩된 자식 메소드만 사용된다.
그러나 자식 클래스 내부에서 오버라이딩된 부모 클래스이 메소드를 호출해야 하는상황이 발생한다면 명시적으로 super키워드를 붙여서 부모 메소드를 호출할수있다.
super는 부모객체를 참조하고 있기 때문에 부모 메소드에 직접 접근할 수있다.
this
this는 자기 자신 객체를 지정할 때 사용하는 키워드입니다.
this. 을 사용하면 동일 클래스 내의 멤버(멤버변수,메서드)를 참조 할 수 있습니다.
this() 를 사용하며 생성자 내부에서 자신의 다른 생성자를 호출할 수있습니다.
접근 제한자 -Protected
-접근 제한자는 클래스와 멤버변수, 메서드,생성자의 접글을 제어할 수 있는 제한자입니다.
-라이브러러ㅣ 클래스를 설계할 때는 외부 클래스에서 접근할 수 있는 멤버와 접근할 수 없는 멤버로 구분해서 변수,생성자, 매서드를 설계하는것이 바람직합니다.
-외부에서 객체 생성을 막기 우이해 생성자를 호출하지 못하게 하거나 객체의 특정 데이터를 보호하기 위해 해당 멤버변수에 접근하지 못하도록 막는것이 접근 ㅈ제한자의 역할입니다.
클래스에는 접근 제한자를 public 과 default만 붙일수있습니다.
정보은닉-캡슐화
은닉(Encapsulation)캡슐화
은닉은 상세한 내부부분은 숨기고 필요한 부분만 보이게 하는 것입니다.
은닉을 사용하기 위해서는 클래스의 멤버변수의 접근제한자를 private으로 설정합니다.
변수의 값을 변경시키는데 사용되는 메서드는 setter메서드 라고 부르며
변수의 값을 얻어오는데 사용하는 메서드를 getter메서드라고 부릅니다.
공개 메서드를 이용해서 데이터변경 할 경우 메서드내에 데이터 유효성을 검증할수있는 루틴을 넣을수있습니다.
접근 권한을 체크할수 있는 로직을 포함시키면 인가되지 않은 사용자에게 중요한 데이터나 로직을 숨길 수도 있습니다.
멤버변수만 private 제한자를 가지는 것은 아닙니다. 외부에 공개 하고 싶지않은 메서드들도 private으로 선언할수 있습니다.