일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 자바
- swing
- Join
- Reader
- Connection
- Oracle
- DB연동
- 상속
- Serializable
- statement
- java
- array
- 난수
- Annotaion
- DB
- 조회
- JDBC
- Transaction
- 16bit
- driver
- stream
- 오라클
- 예외처리
- select
- where
- 8bit
- 다이얼로그
- InputStream
- transient
- set
- Today
- Total
오버플로
[Java] Overloading / Overriding / Annotaion / Abstract Class 본문
1. Overloading(Overload)
- method 다형성의 종류
- 하나의 클래스 안에서 같은 이름의 method를 여러 개 정의하는 것
- 생성자도 Overloading 가능
- 호출될 때 구분되도록 정의하여야 함
- 규칙) 접근지정자&반환형 달라도 됨 / method명 같아야 함 / 매개변수 반드시 다르게 정의!
2. Overriding(Override)
- method 다형성의 종류
- 상속 관계에서 부모, 자식 클래스 간에 같은 이름의 method를 정의하는 것
- 부모 클래스에서 제공하는 기능을 덮어쓰고 자식 클래스에서 수행할 기능으로 변경하는 것
(단, 부모 클래스의 method에서 final이 선언되어 있으면 Overriding 불가)
- 규칙) *접근지정자는 달라도 되나 반환형&method명&매개변수 반드시 같도록 정의!
*접근지정자 정의 시, 자식 클래스의 접근지정자가 부모 클래스의 접근지정자보다 광의여야 함
(Ex. 부모 클래스 method의 접근지정자 : protected -> 자식 클래스의 method 접근지정자 : protected/public)
3. Annotation (주석 달기)
- JDK1.5에서부터 제공하는 기능
- Compiler에게 컴파일 시에 부가적인 일을 할 수 있도록 설정하는 것 (본래의 Compiler는 문법체크의 기능만 수행함)
- 종류)
@Override : method가 Override 되었는지 컴파일 시 체크 / method 위 정의
@Deprecated : 비추천 method인지 체크 / method 위 정의 (Ex. date.getYear())
@SuppressWarnings : 경고를 표시할 때 사용 / method 위, method 안에서 정의
4. Abstract Class
- 상속관계에서 부모 클래스를 작성할 때 사용하는 클래스 (상속하기 위해 만드는 클래스)
- 일반 클래스의 변수/method 외에 *abstract method(추상 메소드)가 추가됨
*abstract method
- 구현의 강제성이 있는 method
- 자식 클래스에서 반드시 자신에 맞게 Override 해야 함
- 부모 클래스에 명시된 abstract method에는 body({ })가 없으므로 업무 로직 구현 불가
- 추상클래스는 직접 객체화 되지 않음 (자식 클래스를 통해서만 객체가 생성됨)
> extends하더라도 자식클래스 객체명 = new 자식클래스생성자();
> 추상클래스는 일을 하지 않는다!
- abstract class 작성법)
접근지정자 abstract class 클래스명 [extends 부모클래스명] [implements 구현인터페이스명,,] { }
- abstract method 작성법)
접근지정자 abstract 반환형 method명 (매개변수,,);
*접근지정자 : public, protected만 가능
*Overloading 가능
# 오늘의 코딩 #
- 추상클래스 실습!
package test;
/**
* 부모클래스 : 상속 및 abstract <br>
* @author user
*/
public abstract class AbsParents {
public AbsParents() {
// super(); // 모든 클래스의 생성자에는 super가 생략되어 있음. 여기서의 부모 클래스는 Object.
System.out.println("부모클래스 생성자");
}// AbsParents
public void parentsMethod() {
System.out.println("부모의 기본 method");
}// parentsMethod
/**
* 집에서 밥을 먹는 method - 자식에 의해 구현될 method<br>
*/
public abstract void eat(); //Overloading
/**
* 밖에서 밥을 먹는 method - 자식에 의해 구현될 method<br>
* @param menu : 음식의 종류
* @param price : 음식의 가격
* @return
*/
public abstract String eat(String menu, int price); //Overloading
}//class
- 상속관계를 통해 자식 클래스의 생성자보다 부모 클래스의 생성자가 먼저 실행되는 것을 증명하기 위해 생성자에 println 추가
- 기본 method와 abstract method (Overload로 2개 생성)
package test;
/**
* 자식클래스 : extends하고 abstract method를 구체화할 당사자
* @author user
*/
public class AbsChild extends AbsParents {
public AbsChild() {
System.out.println("자식클래스 생성자");
}// AbsChild
/**
*집에서 밥 먹는 method<br>
*/
public void eat() { //부모 클래스의 method Override
System.out.println("집에서 밥을 먹고 있어요");
}// eat
/**
*식당에서 외식하는 method<br>
*/
public String eat(String menu, int price) { //부모 클래스의 method Override
return "식당에서 " + menu + "을(를) " + price + "원 주고 먹어요";
}// eat
public static void main(String[] args) {
//객체화
AbsChild ac = new AbsChild(); // 부모 생성 후 자식 생성됨
//상속 및 구현된 method 사용하기
ac.parentsMethod(); //상속. 기본 method
ac.eat(); // Override & Overload method
System.out.println(ac.eat("제육볶음", 8000)); // Override & Overload method
}// main
}// class
- 부모 클래스에서 상속된 method & abstract mehtod를 구현하여 실행!
# 출력 결과 #
부모클래스 생성자
자식클래스 생성자
부모의 기본 method
집에서 밥을 먹고 있어요
식당에서 제육볶음을(를) 8000원 주고 먹어요
'Java' 카테고리의 다른 글
[Java] Date Class / SimpleDateFormat Class / Locale Class (0) | 2021.08.01 |
---|---|
[Java] StringTokenizer (0) | 2021.07.30 |
[Java] Math Class (0) | 2021.07.29 |
[Java] Interface (0) | 2021.07.28 |
[Java] Inner Class / Nested Class / Local Class / Anonymous Inner Class (0) | 2021.07.27 |