[문법/자바/JAVA] 상속, this vs this()

이나영·2022년 3월 26일
0

문법 - Java

목록 보기
4/7
post-thumbnail

🔰상속(inheritance)

상속은 부모 클래스의 멤버를 자식 클래스에 물려줄 수 있게 하는것이다.

  • 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들 수 있도록 한다. => 중복 코드 줄임
  • 부모 클래스를 수정하면 모든 자식 클래스들도 수정되는 효과 => 유지보수 시간을 최소화
class 자식클래스 extends 부모클래스 {
	// 필드
    // 생성자
    // 메소드
}

상속의 특징

  • 여러 개의 부모 클래스를 상속할 수 없다.
  • 부모 클래스에서 private 접근 제한을 갖는 필드와 메소드는 상속 대상에서 제외된다.
  • 다른 패키지의 default 접근 제한을 갖는 필드와 메소드도 상속 대상에서 제외된다.
  • 부모 객체가 먼저 생성되고 그 다음에 자식 객체가 생성된다.

🔰this와 this()의 차이

this

객체 자신의 참조, 객체 자신을 this라고 함

public Korean(String name, String ssn) {
	this.name = name;
    // 필드     // 매개변수
    
    this.ssn = ssn;
    // 필드     // 매개변수
}

필드들을 생성자에서 초기화 하는 과정


this() : 다른 생성자 호출

생성자에서 다른 생성자를 호출할 때 this()코드를 사용

Car(String model) {
	this.model = model;
    this.color = "은색";
    this.maxSpeed = 250; 			//------> 중복코드
}

Car(String model, String color) {
	this.model = model;
    this.color = "은색";
    this.maxSpeed = 250; 			//------> 중복코드
}

Car(String model, String color, int maxSpeed) {
	this.model = model;
    this.color = "은색";
    this.maxSpeed = 250; 			//------> 중복코드
}
public class Car {
	// 필드
    String company = "현대자동차";
    String model;
    String color;
    int maxSpeed;
    
    // 생성자
    Car() { }
    
    Car(String model) {
    	this(mode, "은색", 250);  //
    }
    
    Car(String model, String color) {
    	this(mode, "은색", 250);  //
    }
    
    Car(String model, String color, int maxSpeed) {
    	this.model = model;
        this.color = color;
        this.maxSpeed = maxSpeed;   // 공통 실행 코드
    }
}

생성자 오버로딩이 많아질 경우, 생성자 간 중복 코드가 발생할 수 있다. 위의 코드처럼 this()코드를 이용하면 생성자 오버로딩에서 생기는 중복코드를 줄일 수 있다.



🔰클래스 상속과 생성자 순서를 생각하여 출력 결과 작성

// Parent.java

public class Parent {
	public String nation;
    
    public Parent() {
    	this("대한민국");
        System.out.println("Parent() call");
    }
    
    public Parent(String nation) {
    	this.nation = nation;
        System.out.println("Parent(String nation) call");
    }
}
// Child.java

public class Child entends Parent {
	public String nation;
    
    public Child() {
    	this("홍길동");
        System.out.println("Child() call");
    }
    
    public Child(String name) {
    	this.name = name;
        System.out.println("Child(String name) call");
    }
}
// ChildExample.java

public class ChildExample {
	public static void main(String[] args) {
    	Child child = new Child();
    }
}

// 결과
Parent(String nation) call
Parent() call
Child(String name) call
Child() call

👀책 <혼공자>를 참고하여 작성하였습니다 :)

profile
소통하는 백엔드 개발자로 성장하기

0개의 댓글