Java기반 Back-End 개발자 & 정보처리산업기사 과정 강의 15일차 정리

misung·2021년 4월 8일
0

클래스와 메소드

메소드 오버라이딩

[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

메소드 오버라이딩 실습

예시 1. 현장 발권, 예약 발권에 따른 티켓 가격차를 내는 클래스를 만들어보자.

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원이다.

Static

Static 실습

예시 1.

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

0개의 댓글

관련 채용 정보