객체지향 : 캡상추다 (캡슐화 / 상속 / 추상화 / 다형성)
✨상속
기존의 클래스를 재활용하여 새로운 클래스를 작성
상위클래스의 모든 멤버를 하위 클래스와 공유
(하위클래스의 멤버 개수 = 상위 클래스보다 같거나, 많다)
상속받았다 = 확장받았다 (extend)
✨상속 사용하는 이유? (장점) :
- 코드의 중복 제거 위함 (코드 재활용으로 인한)
- 다형적 표현이 가능
class Person {
String name;
int age;
void learn(){
System.out.println("공부를 합니다.");
};
void walk(){
System.out.println("걷습니다.");
};
void eat(){
System.out.println("밥을 먹습니다.");
};
}
class Programmer extends Person { // Person 클래스로부터 상속. extends 키워드 사용
String companyName;
void coding(){
System.out.println("코딩을 합니다.");
};
}
public class HelloJava {
public static void main(String[] args){
//Person 객체 생성
Person p = new Person();
p.name = "김코딩";
p.age = 24;
p.learn();
p.eat();
p.walk();
System.out.println(p.name);
//Programmer 객체 생성
Programmer pg = new Programmer();
pg.name = "박해커";
pg.age = 26;
pg.learn(); // Persons 클래스에서 상속받아 사용 가능
pg.coding(); // Programmer의 개별 기능
System.out.println(pg.name);
}
}
✨상속 vs 포함 관계 (둘다 코드 재활용 방식)
포함 : 클래스의 멤버로 다른 클래스 타입의 참조변수를 선언
객체지향에서는 포함 관계를 더 사용한다!
~은 ~이다 (IS A) : 상속
!=
~ 은 ~을 가지고 있다 (Has a) : 포함
public class Employee {
int id;
String name;
Address address;
public Employee(int id, String name, Address address) {
this.id = id;
this.name = name;
this.address = address;
}
//중략
lass Address {
String city, country;
public Address(String city, String country) {
this.city = city;
this.country = country;
}
}
-> Address 클래스로 변수들 묶어준 다음, Employee 클래스 안에 참조변수 선언함
✨메서드 오버라이딩 = 덮어쓰기
: 상위 클래스로부터 상속받은 메서드와 동일한 이름의 메서드를 재정의
✨조건 :
1. 메서드의 선언부(메서드 이름, 매개변수, 반환타입)이 상위클래스의 그것과 완전히 일치해야한다.
2. 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 한다.
3. 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다.
class Vehicle {
void run() {
System.out.println("Vehicle is running");
}
}
public class Bike extends Vehicle { // Vehicle 클래스 상속
void run() {
System.out.println("Bike is running"); // 메서드 오버라이딩
}
public static void main(String[] args) {
Bike bike = new Bike();
bike.run();
}
}
// 출력값
"Bike is running"
✨Super vs super()
this, this() 와 유사하다 (자신 객체, 자신의 생성자 호출)
super, super()는
상위 클래스의 객체, 상위클래스의 생성자 호출
: 상위 클래스의 존재를 상정함, 상속관계 전제
- 생성자 안에서만 사용 가능
- 모든 생성자의 첫줄에 와야 함
✨Object Class
자바 클래스의 상속계층도에 가장 위에 위치
: Object 클래스의 멤버들을 자동으로 상속받아 사용 가능
(= 아래의 메서드들 따로 정의 안하고 사용 가능하다)
'Spring > Java' 카테고리의 다른 글
[JAVA - OOP 심화3] 다형성 (0) | 2022.09.08 |
---|---|
[JAVA - OOP 심화2] 캡슐화 (0) | 2022.09.08 |
[Java - OOP 기초3] 생성자와 내부클래스 (0) | 2022.09.07 |
[Java - OOP 기초2] 필드와 메서드 (0) | 2022.09.07 |
[Java - OOP 기초1] 클래스와 객체 (0) | 2022.09.07 |
댓글