: 기존 클래스를 재활용해 새로운 클래스를 작성하는 방법으로, 상위 클래스를 상속받은 하위 클래스는 상위 클래스의 모든 멤버를 상속 받을 수 있다.
(객체 지향 프로그래밍에서는 단일 상속만을 허용)
class Person {
String name;
int age;
void eat() {
System.out.println("밥을 먹습니다.");
}
}
class Athlete extends Person { // Person을 상속받아 Person의 멤버를 공유
String sport;
void exercising() {
System.out.println("운동을 합니다.");
}
}
public class Ex {
public static void main(String[] args) {
Athlete at = new Athlete();
at.name = "park";
at.age = 20;
at.sport = "tennis";
at.eat();
at.exercising();
System.out.println(at.name);
System.out.println(at.sport);
}
}
// 출력
밥을 먹습니다.
운동을 합니다.
park
tennis
: 클래스의 멤버에 다른 클래스의 참조변수를 선언함으로써 상속처럼 클래스를 재사용할 수 있는 방법
public class Person {
String name;
int age;
**Address address**;
public Person(String name, int age, Address address) {
this.name = name;
this.age = age;
this.address = address;
}
public static void main(String[] args) {
Address address1 = new Address("서울", "한국");
Person p = new Person("park", 20, address1);
}
}
class Address {
String city, country;
public Address(String city, String country) {
this.city = city;
this.country = country;
}
}
: 상위 클래스에 정의되어 있는 메서드를 하위 클래스에 동일 메서드명의 메서드를 다른 내용으로 재정의 하는 것
class Vihicle {
void run() {
System.out.println("Vihecle is running");
}
}
class Bike extends Vihicle {
void run() { // 상위 Vihicle 클래스의 run() 메서드를 오버라이딩
System.out.println("Bike is running");
}
}
: this(), this 키워드와 같이 super()은 상위 클래스의 생성자를 호출하고, super는 상위 클래스의 객체를 의미한다.
: 자바 클래스의 최상위에 위치한 최상위 클래스로 모든 클래스에 자동으로 extends Object 된다.
메서드명 | 반환 타입 | 내용 |
---|---|---|
toString() | String | 객체 정보를 문자열로 반환 |
equals() | boolean | 스택 메모리 값을 비교해서 같으면 true, 다르면 false 반환 |
hashCode() | int | 객체 위치정보 관련, Hashtable이나 HashMap에서 동일 객체여부 판단 가능 |
wait() | void | 현재 스레드 일시정지 |
notify() | void | 일시정지 중인 스레드 재동작 |
: 정보 은닉을 위해 객체의 속성과 기능의 데이터를 외부로부터 보호하는 것
: 클래스들을 그룹으로 묶어 효율적으로 관리하기 위한 클래스와 인터페이스의 묶음
: 다른 패키지 내 클래스를 패키지명 없이 사용하기 위해 작성하는 구문
: 정보 은닉을 위해 클래스나, 필드, 메서드, 생성자 등에 접근 권한을 부여하는 키워드
접근 제어자 | 접근 범위 |
---|---|
private | 동일 클래스에서만 접근 가능 |
default | 동일 패키지 내에서만 접근 가능 |
protect | 동일 패키지와 하위 클래스에서 접근 가능 |
public | 모두 접근 가능 |
: 정보 보호와 은닉을 위해 접근 제어자를 사용해 캡슐화를 달성하면서도 데이터에 접근하고 싶을 때 사용하는 메서드
: 변수 값을 읽어오기 위해 사용
: 변수 값을 변경하기 위해 사용
class Person {
private String name;
private int age;
public String getName() { // 변수 값 반환
return name;
}
public int getAge() { // 변수 값 반환
return age;
}
public void setName(String name) { // 변수 값 변경
this.name = name;
}
public void setAge(int age) { // 변수 값 변경
this.age = age;
}
}