본문 바로가기

기초공부/JAVA

[JAVA]접근자/설정자 메소드도 상속될까?

자바 공부하면서 의문이 생겼다.
자식 클래스도 부모의 접근자 메소드를 상속 받을까?
그래서 실험해 보았다.

준비물
부모 클래스

public class Person {
	private String name; // private로 설정하면 name에는 접근자/설정자 메소드만 접근할 수 있다.
	
	public Person (String n) { // 생성자 정의
		name = n;
	}

	public String getName() {	return name;	} // 부모 접근자 메소드
	public void setName(String name) {	this.name = name;	} // 부모 설정자 메소드
}



자식 클래스

class Customer extends Person {
	private String id;
	
	public Customer(String n, String i) { // 생성자 정의
		super(n); // 부모 클래스의 생성자 호출
		id = i;
	}

	public String getId() {	return id;	} // 자식 접근자 메소드
	public void setId(String id) {	this.id = id;	} // 자식 설정자 메소드
	
	public static void main(String args[]) {
		Customer c = new Customer("[name]", "[id]");
		System.out.println(c.getId()); // 자기 클래스의 접근자 호출 - 된다면 [id]가 출력됨
		System.out.println(c.getName()); // 부모 클래스의 접근자 호출 - 된다면 [name]이 출력됨
	}
}



결과

답 : 상속 받는다.

+ 나처럼 자바 초보일 분들을 위한 작은 팁
1. 부모 클래스에서 생성자를 정의했으면 자식 클래스에서도 super을 명시적으로 호출하여 매개변수를 동일하게 써야 한다.
super를 명시적으로 호출하지 않으면 자바는 부모의 기본 생성자를 호출하는데 부모 클래스에서 생성자를 따로 정의했다면 기본 생성자가 없어 에러가 발생하기 때문이다.
2. 부모 클래스에서 생성자를 private로 정의하면 자식 클래스에서 super를 이용해 부모 클래스의 생성자를 호출할 수 없다.
부모 클래스의 생성자를 호출할 수 없으면 1번 문제 때문에 에러가 발생할 수 있다.