Coding/Java

Java Inheritance(상속)

heyoon2j 2020. 9. 16. 16:39

■ Java Inheritance (상속)

- 클래스를 상속하게 되면 모든 멤버변수 및 메소드를 계승하여, 새로운 클래스를 생성하는 것

- 상속할 대상 : 추상 클래스, 부모 클래스, 상위 클래스, 슈퍼 클래스

- 상속 결과 : 자손 클래스, 자식 클래스, 하위 클래스, 서브 클래스

- 상속 관계를 흔히 'IS-A' 관계라고 부른다.

- extends 키워드를 사용

 

// 부모 클래스
class Person{
    ...
}

// 자식 클래스{
class Developer extends Person{
    ...
}

 


포함 관계 (Class Composition)

- 'HAS-A' 관계

- 하나의 클래스가 다른 클래스의 객체를 보유하는 관계

class MainMachine{
    ...
}

class Developer{
    MainMachine mainMachine;
    
    Developer(MainMachine mainMachine){
    	this.mainMachine = mainMachine
    }
}

 


 메소드 재정의 (Method Override)

- Override -> 덮어 씌운다, 해킹해서 뭔가 달라지게 하다.

- 다형성(Polymorphism)의 근간이 된다.

- 어노테이션 @Override를 관례적으로 붙여준다(문법적 체크 및 가독성을 위해서)

class Person{
    public void writeCode() {
        System.out.println("아무 코드나 일단 적어 보았다.");
    }
}

class Student extends Person{
    @Override
    public void writeCode() {
        System.out.println("능숙하게 코드를 작성해 보았다.");
        System.out.println("답은 틀렸다.");
        System.out.println("하지만 무언가 또 배웠다.");
    }
}

class Developer extends  Person{
    @Override
    public void writeCode() {
        System.out.println("능숙하게 코드를 작성했다.");
    }
}

 


 다형성 (Polymorphism)

- Method Override를 이용하여 하나의 클래스로 여러 동작을 표현할 수 있게 한다.

public class MethodOverride {
    public static void main(String[] args) {
        Student stud = new Student();
        Developer dev = new Developer();

        // 부모 클래스 자료형으로 자식 클래스를 받을 수 있다.
        Person p = (Person)dev;
        // Developer의 writeCode() 실행, 부모 클래스 자료형이지만 오버라이드된 메소드가 동작한다.
        p.writeCode();

        // Student의 writeCode() 실행
        p = (Person)stud;
        p.writeCode();
    }
}

 


• super 키워드

this 키워드가 자기 자신의 객체를 참조하듯, super 키워드는 부모 객체를 참조한다.

super 키워드를 이용하여 부모 클래스 생서자를 호출할 수 있다.

class Foo{
    int x;
    Foo(int x){
        this.x = x;
    }
}

class Bar extends Foo{
    int y;
    Bar(int x, int y){
        super(x);		//super 생성자는 첫 줄에만 올 수 있다
        this.y = y;
    }
}

 

 

 

 

'Coding > Java' 카테고리의 다른 글

Java Polymorphism(다형성)  (0) 2020.09.17
Java Modifier(제어자)  (0) 2020.09.16
JavaDoc 만드는 방법  (0) 2020.09.16
Java Class(클래스)  (0) 2020.09.16
Java String(문자열)  (0) 2020.09.16