상속
-부모로부터 자식에게 물려주는 행위
자바에서의 상속: 자식클래스가 부모클래스로부터 물려받음
부모의 멤버(필드, 메소드)를 상속받음
상속받기
- 자식이 부모 클래스를 지정해서 상속받음
- extends 를 사용
- 자식 클래스는 부모 클래스의 필드와 메소드를 가져와 사용할 수 있다.
class ChildClass extends ParentsClass{
void a(){
b(); // 부모클래스의 메소드. <ParentsClass의 b 메소드입니다>가 출력
System.out.println(testB); // testB: 부모클래스의 필드
}
}
class ParentsClass{
int testB = 10;
void b(){
System.out.println("ParentsClass의 b 메소드입니다");
}
}
super와 부모생성자
super()
- super() 혹은 super(매개변수) 형식을 사용
- 부모 클래스 생성자를 호출
- 자식 클래스 생성자의 첫 번째 줄에 작성해야 함
//자식클래스
class JavaStudent extends Student{
//자식클래스의 생성자
JavaStudent(){
super(); //(매개변수가 없는) 부모클래스(Studnet)의 생성자 호출
}
JavaStudent(String name){
super(name); //(매개변수가 있는) 부모클래스(Student)의 생성자 호출
}
}
//부모클래스
class Student{
String name;
Student(){
this("무기명");
}
Student(String name){
thit.name = name;
}
}
오버라이딩
- 오버라이딩: 재정의한다
- 메소드 오버라이딩: 자식클래스가 부모클래스의 메소드를 재정의한다
>> 메소드 오버라이딩을 할 때는 선언부를 동일하게 작성해야 함
>> 메소드의 이름, 매개변수, 결과값이 동일해야함.
//자식클래스
public class JavaStudent extends Student{
JavaStudent(String name){
super(name);
}
//메소드 오버라이딩: 부모클래스(Student)의 메소드(study(subject))를 재정의
//이름: study / 매개변수:String / 결과값: void 로, 선언부가 동일
@Override
void study(String subject){
System.out.println("자바 기초 "+subject+"을 공부합니다");
}
}
public class Student{
String name;
int age;
Student(String name, int age){
this.name = name;
this.age = age;
}
void study(String subject){
System.out.println(subject+"를 공부합니다");
}
}
>> 상속관계에서 메소드 오버라이딩을 한 뒤에는 자식 객체의 오버라이딩한 메소드가 호출된다.
JavaStudent javaStudent = new JavaStudent("홍길동", 25);
System.out.println(javaStudent.study("상속")); //자바 기초 상속을 공부합니다
* @Override
- 어노테이션(Annotation): 소스코드에 추가해서 사용할 수 있는 메타 데이터의 일종으로, @를 붙여 사용
코드 문법 확인을 위해 컴파일러에게 정보를 제공.(확인작업을 거침)
- @Override: 오버라이딩(재정의)한 메소드임을 나타내는 어노테이션
오버라이딩 상태에서 부모클래스의 메소드 호출
- suoper키워드를 사용
//자식클래스
public class JavaStudent extends Student{
JavaStudent(String name){
super(name);
}
@Override
void study(String subject){
System.out.println("자바 기초 ");
super.study(subject); // 부모 클래스의 study 메소드 호출
}
}
//부모클래스
public class Student{
String name;
int age;
Student(String name, int age){
this.name = name;
this.age = age;
}
void study(String subject){
System.out.println(subject+"를 공부합니다");
}
}
'Language > java' 카테고리의 다른 글
java 기초 10: 추상 클래스(abstract class) (0) | 2023.01.05 |
---|---|
java 기본 9: 접근 제한자(public/protected/friendly/default/private) (0) | 2023.01.05 |
java 기초 7: String 클래스 (0) | 2023.01.04 |
java 기초 6: 참조 변수 (0) | 2023.01.04 |
java 기초 5: 클래스와 객체 (0) | 2023.01.03 |