본문 바로가기

Java

상속 : 상속의 개념

상속의 개념

자바는 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다.

상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다

만약 부모 클래스가 이렇게 생겼다? (상위 클래스)

public class ItsA{
	private String field0;
	int field1;
	void method1() {...}
}

자식 클래스는 extends 키워드를 사용해서 상속할 수 있다. (하위 클래스)

public class ItsB extends ItsA{
	String field2;
	void method2() {...}
}

⇒ 보이진 않지만.. 결과적으로 하위 클래스(class ItsB)는 상위 클래스가 가진 것들을 가지고 있다.

int field1, void method1(){ ... }, String field2, void method2() { ... } 를 모두 가진 것!

*다만 private 접근 제한자를 갖는 경우 상속에서 제외된다. 다른 패키지인데 default를 접근 제한자로 갖는 경우에도 상속에서 제외 된다.

자바는 여러 개의 상위 클래스를 상속 할 수 없다. 단 하나의 클래스만 와야 한다.

class 하위클래스 extends 상위클래스1, 상위클래스2{ //안된다
}

상위 생성자 호출

상위 클래스의 내용을 하위 클래스가 가져오기 때문에 무조건 상위 클래스가 먼저 존재해야 한다.

그래서 ItsA를 상속한 ItsB를 new키워드를 사용해서 객체를 생성하면? ItsA가 생성되고, ItsB가 생성된다.

ItsB itsb = new ItsB();//(생성자를 호출한단 의미)

분명 ItsB는 new ItsB로 생성자 호출했는데.. ItsA는 어떻게 된걸까?

컴파일러*.java→.class(JVM이 이해할 수 있는 파일)가 자동으로 super()를 넣어준다.

public class ItsB extends ItsA{
	super();
	String field2;
	void method2() {...}
}

super()는 상위 클래스의 기본 생성자를 호출한다. ★단 super()는 반드시 자식 생성자 첫 줄에 위치해야 한다.

다시, super()는 상위 클래스의 생성자를 호출하는 기능으로 쓰인다고 했다. 그래서 다른 오버로딩한 다른 생성자를 쓸 수도 있다.

public class People{
	public Stirng name, ssn;
	public People(){
	}
	public People(String name, String ssn){
		this.name = name;
		this.ssn = ssn;
	}
}
public class Student extends People{
	public int studentNo;
	public Student(String name, String ssn, int studentNo){
		super(name, ssn);
		this.studentNo, studentNo;
	}
}

super(name, ssn)는 People 클래스에서 String name과 String ssn이 매개변수로 있는 생성자함수 사용

+ 객체 이용

public class StudentExample{
	public static void main(String[] args){
		Student student = new Student("홍길동", "12345-1234567", 1);
		System.out.println(student.name+student.ssn+student.studentNo);
	}
}
반응형

'Java' 카테고리의 다른 글

상속 : final 클래스와 final 메소드  (0) 2021.03.07
상속 : 메소드 재정의(오버라이딩)  (0) 2021.03.07
참조타입  (0) 2021.03.04
변수와 타입  (0) 2021.02.08
동일성과 동등성(==, equals())  (0) 2021.01.10