본문 바로가기
프로그래밍 언어/java

[java] 자바 기본 문법 @override

by m2162003 2020. 10. 2.

자꾸 잊어버리는 내 자신을 위한 포스팅.... 자바 공부를 열심히 해야겠다

자바의 핵심 개념인 객체(class) 그리고 상속(extends)!

 

왜 쓸까? 오버라이딩을 오타없이 하기 위해...

 

오버라이딩이란?

 

부모 클래스(super class)에 존재하는 필드나 메서드를 자식 클래스(sub class)에서 재정의하여 사용하는 것.

즉 부모 클래스의 이미 정의된 (주로) 함수를 약간 바꾸고 싶다! 하면 사용한다.

 

오버라이딩을 통해 슈퍼클래스를 부르고 싶다면 super()을 쓰면 된다.

 

@override의 사용 이유

오버라이딩을 하려면 서브 클래스에 슈퍼 클래스 함수와 동일한 이름으로 정의되어야 한다. 그런데 적다보면 오타도 나고..오타가 나서 다른 함수가 적히면 아예 새로운 함수가 생성되는 것!

그래서 이런 불편함을 덜고자 @override를 단다.

@override가 달리면 부모 클래스로 해당 함수를 검색하는데 이 때 부모클래스에 똑같은 함수 이름이 없으면 에러남!

 

예시 코드를 보자.

상황: 사람이라는 부모 클래스와 학생 서브 클래스를 만든다.

 

부모 클래스(super class)

 

package com.company;

public class Person {
    private String name;
    private int age;
    private String home;

    public Person(String name, int age, String home){
        this.name = name;
        this.age = age;
        this.home = home;
    }

    public void sayAboutMe(){
        System.out.println("hello my name is "+ name + ". I am " + age + " years old.");
    }

    public void sayAboutHome(){
        System.out.println("I live in " + home);
    }

}

 

자식 클래스(sub class)

package com.company;

public class Student extends Person{

    private String school;

    public Student(String name, int age, String home, String school) {
        super(name, age, home);
        this.school = school;
    }

    @Override
    public void sayAboutMe(){
        super.sayAboutMe();
       System.out.println("I am a Student.");
    }

    @Override
    public void sayAboutHome(){
        System.out.println("I studied at " + school + " University.");
    }
}

 

 

main에서

package com.company;

public class Main {

    public static void main(String[] args) {
	// write your code here

        Person person1 = new Person("a", 1, "home");

        person1.sayAboutMe();
        person1.sayAboutHome();

        Student student1 = new Student("jenny", 25, "anam", "Korea");

        student1.sayAboutMe();
        student1.sayAboutHome();
    }
}

 

 

결과:

 

잘 나온다.

 

정리)

오버라이딩이란 슈퍼클래스의 필드나 매서드 재정의를 위해 만든 것

오버라이딩을 하려면 슈퍼클래스의 필드/매서드와 이름이 동일해야 함

@override를 단다면 오버라이딩한다고 명시하는 것

'프로그래밍 언어 > java' 카테고리의 다른 글

[java] 접근 제어자, 정보 은닉  (0) 2021.02.24
[java] 클래스 생성자  (0) 2021.02.24
[java] 클래스와 인스턴스  (0) 2021.02.22
[java] Optional과 orElse 시리즈  (0) 2020.10.08
[java] extends vs implements  (0) 2020.10.02

댓글