학습 목표
상위 클래스-하위 클래스의 상속 관계의 핵심을 이해하고, 그 장점을 설명할 수 있다.
extend키워드를 사용하여 두 개 이상의 클래스 간 상속 관계를 정의할 수 있다.
포함관계와 상속관계의 차이를 설명할 수 있다.
상속 관계에서 사용할 수 있는 메서드 오버라이딩의 정의, 성립 조건, 장점을 이해하고 이를 활용할 수 있다.
super와 super() 의 차이를 설명할 수 있다.
Object 클래스가 자바 클래스의 상속계층도에서 최상단에 위치한다는 사실을 이해할 수 있다.
객체지향 (캡!상추다)
상속
캡슐화
추상화
다형성 ( 하나의 객체가 여러 모양으로 표현될 수 있는 것)
[상속]
상위(super) 클래스 멤버를 하위(surb) 클래스에 내려 주는 것
extends : 확장판 개념 (상속받았다는 표현 대신)
다중상속 X (단일 상속만을 허용. 부모 하나만 가진다)
코드의 중복 제거 및 재사용
class Person {
String name;
int age;
void walk(){
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 p = new Person(); // Person 객체 생성
p.name = "김코딩";
p.age = 24;
p.walk();
System.out.println(p.name);
Programmer pq = new Programmer(); // Programmer 객체 생성
pg.name = "박해커";
pg.age = 26;
pg.coding(); // Programmer의 개별기능
[포함 관계]
클래스 재사용. 클래스의 멤버로 다른 클래스 타입의 참조변수 선언하는 것
클래스 간의 관계가 '~은 ~이다 (is ~)' 관계이면 상속.
'~은 ~을 가지고 있다 (has ~)' 관계이면 포함
[메서드 오버라이딩]
상위 클래스에서 상속받은 메서드와 동일한 이름의 메서드를 재정의 하는 것 (덮어쓰기)
조건 3가지 : ① 메서드 선언부(메서드 이름, 매개변수, 반환타입)이 상위 클래스와 완전히 일치 ② 접근 제어자의 범위가 상위 클래스의 메서드보다 같거나 넓어야 ③ 예외는 상위 클래스의 메서드보다 많이 선언할 수 없다
모든 객체를 상위 클래스 타입 하나로 선언하면 배열로 한번에 관리 가능
Vehicle[] vehicles = new Vehicle[] { new Bike(), new Car(), new MotorBike()};
for (Vehicle vehicle : vehicles) {
vehicle.run();
}
[super 키워드와 super()]
super 상위 클래스의 객체 호출
super() 상위 클래스의 생성자 호출
↔︎
this 자신의 객체 호출
this () 자신의 생성자 호출
super와 this 모두 상위 클래스 상속 관계를 전제
[Object 클래스]
상속 계층도에서 최상위에 위치한 상위클래스
아무 상속 받지 않는 클래스에 자동적으로 extend Object 추가.
[캡슐화]
속성과 기능을 하나의 캡슐로 만들어 데이터를 외부로부터 보호하는 것
데이터 보호(외부로부터 클래스에 정의된 속성과 기능 보호). 데이터 은닉(외부에 필요한 부분만 노출)
private, default, protected, public 접근제어자
getter/setter 메서드
피그마 uix 디자인하는 툴