[Janitor class] public int getSalary() { return 3000; } [ProJanitor class extends Janitor] @Override public int getSalary() { return 5000; } ... Janitor jan = ... ProJanitor pjan = ... sysout jan.getSalary(); sysout pjan.getSalary();
→
3000
5000
Ticket - 기본적인 티켓 클래스
double ticketPrice; // 티켓 가격 public Ex03_Ticket(double ticketPrice) { this.ticketPrice = ticketPrice; } // 티켓 가격 반환 메소드 public double getTicketPrice() { return ticketPrice; }
NormalTicket extends Ticket -
티켓 클래스 상속받아 만든 현장발권 티켓boolean payByCard; // 카드로 지불했는지 여부 public Ex03_NormalTicket (doubleticketPrice, boolean payByCard) { super(ticketPrice); this.payByCard = payByCard; } // getTicketPrice() 재정의 // 카드결제일 경우 수수료를 5% 추가해줄 것. @Override public double getTicketPrice() { // 카드로 결제했다면 if (payByCard) { // 카드결제 수수료 5% 반영하여 반환 return ticketPrice * 1.05; } else { return ticketPrice; } }
BookingTicket extends Ticket -
티켓 클래스를 상속받아 만든 예약발권 티켓int bookingDays; // 예약일 public Ex03_BookingTicket(double ticketPrice, int bookingDays) { super(ticketPrice); this.bookingDays = bookingDays; } /* * getTicketPrice() 재정의 * 예약일이 30일 이상 남았을 경우 50% 할인, * 10일 이상 남은 경우 30%, 5일 이상의 경우 10% */ @Override public double getTicketPrice() { if (bookingDays >= 30) { return ticketPrice * 0.5; } else if (bookingDays >= 10) { return ticketPrice * 0.7; } else if (bookingDays >= 5) { return ticketPrice * 0.95; } return ticketPrice; }
TicketMain
// 일반적인 티켓, 카드결제 안함 Ex03_NormalTicket normalTicket = new Ex03_NormalTicket(100000, false); System.out.println("구매한 티켓의 가격은 " + normalTicket.getTicketPrice() + "원이다."); Ex03_BookingTicket bookTicket = new Ex03_BookingTicket(100000, 30); System.out.println("예약한 티켓의 가격은 " + bookTicket.getTicketPrice() + "원이다.");
→
구매한 티켓의 가격은 100000.0원이다.
예약한 티켓의 가격은 50000.0원이다.
int number = 10; // static 변수 static int number2 = 100; void testMethod() { System.out.println("testMethod"); } static void staticMethod() { System.out.println("staticMethod"); // static 메소드에서 일반 필드값을 부를 수는 없다. // System.out.println("number : " + number); // static 필드는 사용이 가능하다. System.out.println("number2 : " + number2); }
// 생성자 통해 객체를 동적할당 해 주어야만 필드값에 접근 가능 //Ex04_Static st = new Ex04_Static(); //System.out.println(st.number); // 객체를 만들지 않고 바로 접근 가능 System.out.println(Ex04_Static.number2); Ex04_Static st1 = new Ex04_Static(); Ex04_Static st2 = new Ex04_Static(); st1.number = 100; st2.number = 200; st1.number2 = 20; // 각각 다른 객체의 서로 다른 필드값을 가짐. System.out.println("st1 num : " + st1.number); System.out.println("st2 num : " + st2.number); // Static(전역) 변수이므로, 객체 생성 전부터 존재하므로 변수를 공유함. System.out.println("st1 num2 : " + st1.number2); System.out.println("st2 num2 : " + st2.number2); // static이 붙어있는 경우 접근 방식은 이것보다.. st2.staticMethod(); // 이게 맞다. Ex04_Static.staticMethod(); // 그래서 아래와 같이 호출하면 어떤 클래스에서 호출했는지 알 수 없다. st1.staticMethod(); st2.staticMethod(); }
→
100
st1 num : 100
st2 num : 200
st1 num2 : 20
st2 num2 : 20
staticMethod
number2 : 20
staticMethod
number2 : 20
staticMethod
number2 : 20
staticMethod
number2 : 20