extends 키워드를 사용하며, 클래스명 다음에 extends 상위 클래스명을 사용하여 정의class Person {
String name;
int age;
void walk(){
System.out.println("걷습니다.");
};
void eat(){
System.out.println("밥을 먹습니다.");
};
}
class Dancer extends Person { // Person 클래스로부터 상속
String groupName;
void dancing(){
System.out.println("춤을 춥니다.");
};
}
public class Employee {
int id;
String name;
Address address;
}
class Address {
String city, country;
}
Employee 클래스 멤버 변수로 Adress 클래스가 정의되있다.Address 클래스 내 인스턴스 변수 city, country를 각각 Employee 클래스의 변수로 정의해야하지만, Address 클래스로 변수들을 묶어준다음 Employee 클래스 안에 참조변수를 선언하는 포함관계로 재상용 → 코드 중복 제거메서드의 선언부(메서드 이름, 매개변수, 반환타입)이 상위클래스의 그것과 완전히 일치해야한다.
접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.
class Vehicle {
void run() {
System.out.println("Vehicle is running");
}
}
public class Bike extends Vehicle { // Vehicle 클래스 상속
void run() {
System.out.println("Bike is running"); // 메서드 오버라이딩
}
// 출력값 : "Bike is running"
Bike bike = new Bike(); // 각각의 타입으로 선언 + 각각의 타입으로 객체 생성
Car car = new Car();
MotorBike motorBike = new MotorBike();
Vehicle bike2 = new Bike(); // 상위 클래스 타입으로 선언 + 각각 타입으로 객체 생성
Vehicle car2 = new Car();
Vehicle motorBike2 = new MotorBike();
// 배열로 한번에 관리하기
Vehicle[] vehicles = new Vehicle[] { new Bike(), new Car(), new MotorBike()};
for (Vehicle vehicle : vehicles) {
vehicle.run();
}
super 키워드는 상위 클래스의 객체의 멤버 값을 참고super()는 상위 클래스의 생성자를 호출최상위 클래스
자바의 모든 클래스는 Object 클래스로부터 확장된다
컴파일러는 아무런 상속을 받지 않는 클래스에 자동적으로 extends Object를 추가
Object 클래스는 자바 클래스의 상속계층도에 가장 위에 위치하기 때문에 Object 클래스의 멤버들을 자동으로 상속받아 사용가능
Object 메서드
| toString() | String | 객체 정보를 문자열로 출력 |
|---|---|---|
| equals(Object obj) | boolean | 등가 비교 연산(==)과 동일하게 스택 메모리값을 비교 |
| hashCode() | int | 객체의 위치정보 관련. Hashtable 또는 HashMap에서 동일 객체여부 판단 |
| wait() | void | 현재 쓰레드 일시정지 |
| notify() | void | 일시정지 중인 쓰레드 재동작 |
점(.)으로 표현import 패키지명.클래스명;import 패키지명.*; → 해당 패키지내 모든 클래스 import| 접근 제어자 | public, protected, (default), private |
|---|---|
| 기타 제어자 | static, final, abstract, native, transient, synchronized 등 |
| 접근 제어자 | 접근 제한 범위 |
|---|---|
| private | 동일 클래스에서만 접근 가능 |
| default | 동일 패키지 내에서만 접근 가능 |
| protected | 동일 패키지 + 다른 패키지의 하위 클래스에서 접근 가능 |
| public | 접근 제한 없음 |
private접근제어자가 포함되어 있는 객체의 변수의 데이터 값을 추가하거나 수정하고 싶을 때set-을 붙여서 정의get-을 메서드명 앞에 붙여서 사용public class GetterSetterTest {
public static void main(String[] args) {
Worker w = new Worker();
w.setName("김코딩");
w.setAge(30);
w.setId(5);
String name = w.getName();
System.out.println("근로자의 이름은 " + name);
int age = w.getAge();
System.out.println("근로자의 나이는 " + age);
int id = w.getId();
System.out.println("근로자의 ID는 " + id);
}
}
class Worker {
private String name; // 변수의 은닉화. 외부로부터 접근 불가
private int age;
private int id;
public String getName() { // 멤버변수의 값
return name;
}
public void setName(String name) { // 멤버변수의 값 변경
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if(age < 1) return; //setter 메서드내 조건에 맞을경우 데이터값 변경가능
this.age = age; // 조건에 안맞을경우 데이터값 저장하지 않고 return.
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}