import java.util.Calendar;
import java.util.GregorianCalendar;
public class CalendarTest {
public static void main(String[] args) {
// Calendar 는 추상클래스이기 때문에 new 를 이용해서 인스턴스를 생성할 수 없다.
// 객체 생성 과정을 숨기는 것.
// Calendar 은 추상클래스라서 인스턴스를 만들 수 없다.
// getInstance() 는 return 값이 Calendar 이지만 실제로는 Calendar 를 반환하는 것이 아니라.
// Calendar 의 자식 클래스들 중에 하나다가 반환 되는 것이다.
Calendar cal2 = Calendar.getInstance();
// 위와는 달리 객체 생성 과정을 숨기는 것이 아니다.
Calendar cal1 = new GregorianCalendar();
System.out.println(Calendar.AM);
System.out.println(Calendar.MONTH);System.out.println(cal2.get(Calendar.YEAR));
// 8 출력된다. 월 값들이 배열에 들어가있는데. 현재 월의 배열 위치를 읽기 때문에 -1 되어있는 값이 나오는 것이다.
System.out.println(cal2.get(Calendar.MONTH));
System.out.println(cal2.get(Calendar.YEAR));
System.out.println(cal2.get(Calendar.DAY_OF_MONTH));
}
}
추상클래스는 new 연산자를 이용해서 인스턴스를 생성할 수 없다.
ex) 자동차 - 추상클래스 , 버스와 승용차가 자동차의 자식클래스면
Car car = new Car(); 이렇게 생성할 수 없다.
Car car = new Bus(); 이렇게 생성은 가능하다.
public class MathTest {
public static void main(String[] args) {
// Math 는 생성자가 없다. (사실 api 문서내에 private 생성자가 존재하긴 함)
// 생성자가 없는 클래스는 static 한 메소드가 있는지 본다.
// static 한 메소드는 클래스명.메소드명() 으로 사용한다.
int value = Math.abs(-1);
System.out.println(value);
}
}
main 메소드에 static 붙은 이유?
JVM 이 해당 인스턴스를 생성하지 않고 main 메소드를 실행하게 만들기 위해서. (인스턴스를 만들고 사용하겠다면 생성자를 만들면 된다.)