상속의 개념
자바는 부모 클래스의 멤버를 자식 클래스에게 물려줄 수 있다.
상속은 이미 잘 개발된 클래스를 재사용해서 새로운 클래스를 만들기 때문에 코드의 중복을 줄여준다
만약 부모 클래스가 이렇게 생겼다? (상위 클래스)
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 |
Uploaded by Notion2Tistory v1.1.0