자체교재-chapter 15 상속
교학사 - 6장 객체지향 프로그래밍 2
상속 (inheritance)
의미 : 기존에 만들어져있는 클래스의 재활용
부모, 조상, super class
자식, 파생, sub class
이라는 단어가 많이 나올 수 있다.
AA클래스 2개
BB클래스 AA2개+1개=3개
CC클래스 4개
DD클래스 2개
. . .
EE클래스 다중상속 안됨 . 하나만 상속받을 수 있다.
상속을 받을 때에 형식 :
class 자식 extends 부모클래스{ }
final class AA(){} -> final 클래스는 종단클래스로 상속시킬 수 없다.
Override - 함수의 재정의
framework -구조화
의미 : 상속관계에서 메소드를 다시 수정하는 것 (리폼하는 것)
Method Overload 함수명 중복 (중복이지만 다 개별함수 )
private 상속안됨. 함수를 은폐시킬 수 있음.
package 상속됨. 하지만 같은 경로안에서만 접근가능 앞에 package가 생략된것
protected 상속됨. 다른 팩키지에서도 접근가능
public 상속됨. basicJava프로젝트 내에서 모두 접근 가능
자바의 뿌리 = Object 클래스
자바의 모든 클래스는 Object 클래스를 상속받아야 한다.
extends Object는 생략가능 ! 안써도 기본적으로 Object를 물려받기 때문에 Object 의 메소드를 사용할 수 있다.
자바의 기본팩키지 java.lang
자바의 최고 조상클래스 Object클래스
자바의 모든 클래스는 생성할 때에 무조건 Object클래스를 상속받는다.
*자바의 모든 클래스는 Object의 후손이다? 맞다 !
Null
null값은 아예 존재하지 않는 것 ,
null 값 : 레퍼런스 변수를 선언만 해 놓은 상태
true 참, false 거짓
CallBy
메소드 호출방식
- Call By Value
- Call By Reference
함수명 작성 시 고려사항
- is~~ : 대부분 리턴형이 boolean
- to~~
- get~~ : 가져온다, 거의 return 형이 있따
- set~~ : 준다, 주고 끝나는 것이기문에 대부분 return형이 없다. void
package oop0603;
public class Test04_CallBy {
public static void test1(int a, int b) {}
public static void test2(int[] su ) {}
public static void test3(Integer a) {}
public static void main(String[] args) {
// 메소드 호출 방식
int[] su={10,15,20};
//값에 의한 호출방식
//Call By Value
test1(su[0],su[2]); //10,20
//참에 의한 호출방식
//Call By Reference 주소값이 넘어가는 것
test2(su);
//Call By Reference
test3(new Integer(5));
}//main() end
}//class end
GregorianCalendar
package밑에 java.util로 불러준다
만약 api에 내가 원하는 메소드가 없다면 , 위의 부모나 할아버지 클래스에 있을 수 있다.
GregorianCalendar class 안에 있는 함수들
1. get(Calendar.~) 현재 달력의 정보 가져오기
//get~ 리턴형이 있음
System.out.println(now.get(Calendar.YEAR)); //2019
System.out.println(now.get(Calendar.MONTH)); //5로 출력이지만 6월 +1해야댐
System.out.println(now.get(Calendar.DATE)); //3
2. isLeapYear 윤년
System.out.println(now.isLeapYear(2020)); //true
3. add(Calendar.~) 날짜 데이터의 연산
//now날짜에 3년 더하기
now.add(Calendar.YEAR, 3); //2022-5-3
System.out.println(now.get(Calendar.YEAR)); //2022
//now날짜에 2달 빼기
now.add(Calendar.MONTH,-2 ); //2022-3-3
System.out.println(now.get(Calendar.MONTH)); //3
//now날짜에 10일 더하기
now.add(Calendar.DATE, 10);
System.out.println(now.get(Calendar.DATE)); //13
문제) 2019년 5월 29일 ~ 2019년 6월 2일의 총 날 수를 구하시오
//현재 시스템의 날짜 가져오기 2019-6-3
Calendar start=Calendar.getInstance();
//start의 날짜값을 변경하기
//2019-5-29
start.set(2019, 5, 29);
start.set(2019, Calendar.MAY, 29);
//2019-6-2
Calendar end=Calendar.getInstance();
end.set(2019, Calendar.JUNE, 2);
//start부터 하루씩 더해준다
1. 하루 더해주는 것이 맨 뒤에 있을 때,
while(start.before(end)){
System.out.print(start.get(Calendar.YEAR));
System.out.print("-");
System.out.print(start.get(Calendar.MONTH)+1);
System.out.print("-");
System.out.print(start.get(Calendar.DATE));
System.out.println();
start.add(Calendar.DATE, 1);
}//while end
출력결과
2019-5-29
2019-5-30
2019-5-31
2019-6-1
2. 하루 더해주는 것이 맨 앞에 있을 때,
2019-5-30
2019-5-31
2019-6-1
2019-6-2
while문에서 start.add(Calendar.DATE, 1); 이 구문을 맨뒤에 적어주었을 때,
while(2019-5-29. before(2019-6-2))
. . . .
while(2019-6-2. before(2019-6-2))는 값이 같으므로 거짓
Constructor
클래스 상속관계에서의 생성자 호출 순서
부모생성자()-> 자신의 생성자() 호출된다
'공부 > 자바 OOP' 카테고리의 다른 글
6월5일 - Abstract class + Interface (0) | 2019.06.05 |
---|---|
6월4일 - 상속 + 객체지향(다향성, object) + exception (0) | 2019.06.04 |
5월31일 - Wrapper 클래스 (0) | 2019.05.31 |
5월30일 - this() / static / final (0) | 2019.05.30 |
5월29일 - Class (0) | 2019.05.29 |