본문 바로가기
Language/java

java 기초 8: 상속

by S2채닝S2 2023. 1. 5.

상속

  -부모로부터 자식에게 물려주는 행위

 

자바에서의 상속: 자식클래스가 부모클래스로부터 물려받음

부모의 멤버(필드, 메소드)를 상속받음

 

 

상속받기

- 자식이 부모 클래스를 지정해서 상속받음

- 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+"를 공부합니다");
    }
}

최근댓글

최근글

skin by © 2024 ttuttak