부모 클래스의 멤버를 자식 클래스가 재사용 하는 것
extends
키워드 사용[접근 제한자] class [자식 클래스] extends [부모 클래스]
자식 클래스에서 부모 클래스의 메소드를 오버라이딩 할 수 있음
✔️ 오버라이딩 : 상위 클래스로부터 상속받은 메소드와 동일한 이름의 메소드를 재정의 하는 것 ↔️ 오버로딩
❗️메소드의 시그니처가 같아야함
❗️접근 제어자의 범위가 상위 클래스의 메소드와 같거나 더 넓어야 함
❗️예외는 상위클래스의 메소드보다 많이 선언할 수 없음
자바에서는 다중 상속을 지원하지 않음! 단일 상속만 가능
super
와 super()
기본적으로 this, this()
와 같음
super
: 부모 클래스의 인스턴스를 가리킴
super()
: 부모 클래스의 생성자를 호출 ➡️ 자식 클래스의 생성자에서만, 가장 첫 줄에 작성해야 함
public class Person() {
String name;
int age;
int id;
// 생성자
Person() {
System.out.println("Person's constructor");
}
void eat() {
System.out.println("person eats");
}
}
//Person 클래스를 상속받은 Programmers 클래스
public class Programmer() extends Person{
int level;
int id;
// 생성자
Programmer() {
// 부모 클래스의 생성자 호출
super();
System.out.println("Programmer's contructor");
}
// overriding
void eat() {
System.out.println("programmer eats");
}
void coding() {
System.out.println("coding is my life");
// Programmer의 id를 Person의 id 값으로 저장
this.id = super.id;
}
}
자바의 최상위 클래스
아무것도 상속받지 않은 클래스에 자동 상속됨
ex) toString()
, equals(object obj)
, hashCode()
, wait()
, nofify()
등
클래스와 인터페이스의 묶음
.
으로 구분)java.lang
, java.util
, java.io
등package practice.test;
다른 클래스 내의 패키지를 사용하기 위한 선언문
패키지와 클래스 구문 사이에 작성
import practice.test
클래스나 인터페이스의 접근을 제한하기 위해 사용하는 키워드
접근 제어를 설정함으로써 데이터를 보호하고, 데이터의 불필요한 노출을 방지(정보 은닉)할 수 있음 ➡️ 캡슐화 !
private
: 같은 클래스 내에서만 접근 가능protect
: 같은 패키지 + 다른 패키지의 자식 클래스에서 접근 가능default
: 같은 패키지public
: 모두 허용캡슐화로 보호/은닉된 데이터를 읽거나 변경하는 방법
public class Person() {
private String name;
}
public class Worker() {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
System.out.println(this.name);
}
}
public class Main() {
public class main() {
Worker w = new Worker();
w.setName("Kim");
w.getName(); // Kim
}
}
오늘은 엄청나게 어렵진 않았다. 그래도 나름 자바를 4탕한 사람의 여유인가...ㅋ.............. 좋은 건지... ㅋ
혼자 getter / setter 를 공부할 때는 그냥 그런갑다~ 편하게 사용할라고 그런갑다 했는데 아무데나 쓰는 게 아닌 걸 오늘 알았다. 캡슐화 관련해서 쓰는 거였구만..... 그저 데이터 읽고 쓰는 건 무조건 getter / setter 를 통해서 하라고 구현한 건줄.....