Link
05-19 20:23
Tags
- JAVA ObjArray
- 자바 필드값 초기화
- Java
- 자바 1대1
- 프로그래머스 자바
- JAVA Aray
- 자바 연산자
- JAVA 자동판매기
- Java switch
- JAVA Parameter
- 자바 1대1 관계클래스
- 자바 객체형 배열처리
- JAVA 메소드
- 자바 1대다관계
- JAVA 메소드 리턴
- JAVA 클래스 구성
- 자바 생성자
- 자바 NullPointer
- JAVA MultiParam
- JAVA NULL
- 개발 로드맵
- ChatGPT 번역
- eclipse
- JAVA 데이터타입
- 자바 다차원 배열
- 리액트 네이티브
- JAVA 연습예제
- 자바 메서드 매개변수
- java 연산자
- java 변수
Archives
- Today
- Total
보기보기 개발 블로그
eclipse / 자바 오버라이딩 본문
안녕하세요 지난 포스팅에서는
자바 생성자에 대하여 알아보았고 이번에는
자바 오버라이딩에 대하여 알아보겠습니다.
eclipse / 생성자
안녕하세요 지난 포스팅에서는 자바 상속에 대하여 알아보았고 이번엔 생성자에 대해 알아보겠습니다. eclipse / 자바 상속 안녕하세요 바빠서 간만에 포스팅 올려봅니다 지난 포스팅에선 자바
stackbok.tistory.com
package javaexp.a09_inheriy;
public class A03_Overriding {
public static void main(String[] args) {
// TODO Auto-generated method stub
/*
#메소드 재정의(overriding)
1. 부모 클래스의 상속 메소드 수정해 자식 클래스에서
재정의 하는것
ㄴ> 다형성 처리(효과적! 효과를 알 수 있음)
2. 메소드 재정의 조건
1) 부모 클래스의 메소드와 동일한 메서드명을 가져야 한다.
2) 접근 제한을 더 강하게 오버라이딩 하는것을 불가하다.
상위 default(x) ==> 하위 default(x),protected, public
상위 protected ==> 하위 protected, public
상위 public ==> 하위 public
3. @Override 어노테이션
컴파일러에게 부모 클래스의 메소드 선언부와 동일한지 검사 지시
정확한 메소드 재정의 위해 붙여주면 ok
ex) 해당 내용을 선언하고, 오기나 잘못된 메서드 표기시 오버라이딩 할때까지
에러가 표기된다. 이게 재정의 인지 뉴 메서드인지 구분
4.메서드 재정의 효과
1) 부모메서드는 숨겨지는 효과 발생
- 재정의된 자식 메소드 실행.
*/
soldier s1 = new soldier();
s1.working();
TaxiDriver td = new TaxiDriver();
//td.working();
/*ex) 재정의 상위클래스로 Company 선언하고
* 회사명, earnMoney() 재정의한 메서드
* 하위 SamsungEle, Hyundai
*
*/
Samsung sam = new Samsung();
sam.earnMoney();
Hyundai hy = new Hyundai();
hy.earnMoney();
}
}
class Company{
private String comp;
Company(String comp){
this.comp = comp;
}
public void earnMoney() {
System.out.println(comp+"회사매출");
}
}
class Samsung extends Company{
public Samsung(String name) {
super(name);
}
public Samsung(){
super("삼성전자"); //this("삼성전자") 하면 위 메서드 호출
//this() 현재 선언돈 생성자를 호출
//super() 는 부모 클래스에서 선언되 생성자호출
//this 는 현재
}
@Override
//오버라이드 : 재정의 여부 확인 없으면 earnMoney1() 이런건 재정의가 아니다
//@Override 를 선언하면 재정의 메서드인지를 확인하여 컴파일시 , check해줌
//오타등을 확인 만약 오버라이딩을 안써놓은채로 했는데 오타나서 1 이렇게 들어가면 그건
//다른메서드다
public void earnMoney() {
super.earnMoney();
//상위에 있는 부모가 가진메서드를 호출
// 재정의 하였기에 부모클래스가 선언한 메서드와 동일한 메서드를 가지고 있다.
//부모의 메서드 내용을 구분하여 호출할 때 , super.메서드 를 활용한다.
System.out.println("20000 을벌어들임");
}
}
class Hyundai extends Company{
public Hyundai(){
super("현다이");
}
@Override
public void earnMoney() {
super.earnMoney();
System.out.println("10000 을 벌어들임");
}
}
class Worker01{
private String kind;
public Worker01(String kind) {
this.kind = kind;
}
public void working() {
System.out.println(kind+"일을 합니다!");
}
}
class soldier extends Worker01{
public soldier() {
super("군인");
}
// 재정의 : 동일한 메서드를 정의..
//내일은 다형성을 배운다 폴리몰리? 폴리몰리
public void working() {
super.working(); // 현재 정의된 클래스와 상위클래스를 구분하게 super.활용
System.out.println("나라를 지킵니다");
}
}
class TaxiDriver extends Worker{
public TaxiDriver() {
super("택시운전기사");
}
//@Override
//public void working() {
//super.working();
// TODO Auto-generated method stub
//System.out.println("택시를 운전합니다.");
//}
}
오버라이딩 같은 경우는 오버로딩과 헷갈릴수있습니다
오버로딩 : 자바의 한 클래스 내에 이미 사용하려는 이름과 같은 이름을 가진 메소드가 있더라도
매개변수의 갯수 또는 타입이 다르면 같은 이름을 사용해서 메소드 정의가능
오버로딩 조건 : 메소드의 이름이 같고 매개변수의 개수 또는 타입이 달라야합니다.
* 리턴값만 다른것은 오버로딩 을 할수없다.
오버라이딩 : 부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의 하는것
오버라이딩 조건 : 부모클래스의 메소드를 재정의하는 것이므로
자식클래스에서는 오버라이딩 하고자 하는 메소드의 이름, 매개변수 , 리턴값이 모두 같아야함
* 위 코드에서 @Override는 어노테이션 이라는것으로 일반적인 주석과 다르게 검증하는 기능을 합니다
이상으로 오버라이딩에 대하여 알아보았습니다
감사합니다.
'Java' 카테고리의 다른 글
eclipse / 생성자 (0) | 2023.04.19 |
---|---|
eclipse / 자바 상속 (0) | 2023.04.18 |
eclipse / 자바 패키지 (0) | 2023.03.25 |
eclipse / 자바 1대다 관계 클래스 (0) | 2023.03.25 |
eclipse / 자바 1대1 관계 클래스 (0) | 2023.03.25 |