[KOSTA] Spring 기반 Cloud 12일차 - 상속, 오버라이딩 실습

JUNBEOM PARK·2022년 2월 15일
0
post-thumbnail

🎲 상속(extends)를 활용하여 클래스 구현

Person.java - 이름,나이,직업
Salary - 연봉 관련 필드, 메소드 구현

📃 풀이

Person.java

package kosta.oop2;

public class Person {
	private String name;
	private int age;
	private String job;
	
	public Person() {
		
	}
	
	public Person(String name, int age, String job) {
		this.name = name;
		this.age = age;
		this.job = job;
	}
	
	public void print() {
		System.out.println("이름 : " + name);
		System.out.println("나이 : " + age);
		System.out.println("직업 : " + job);
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getJob() {
		return job;
	}

	public void setJob(String job) {
		this.job = job;
	}
	
	
}

Salary.java

package kosta.oop2;

public class Salary extends Person {
	private int pay; //월급
	
	public Salary() {
		
	}

	public Salary(String name, int age, String job, int pay) {
		super(name, age, job);
		this.pay = pay;
	}
	
	public void show() {
		System.out.println("이름 : " + getName()); // 부모 클래스인 person클래스의 필드가 private 으로 선언 되었으니 set/get 으로 간접 접근
		System.out.println("나이 : " + getAge());
		System.out.println("직업 : " + getJob());
		System.out.println("연봉 : " + salayInfo(pay));
	}
	
	// 연봉 계산 하는 메소드
	public int salayInfo(int pay) {
		return this.pay = pay * 12;
	}
    
	//월급 인상
	public int raisePay(int pay) {
		return this.pay += pay;
	}
	
    //월급 삭감
	public int downPay(int pay) {
		return this.pay -= pay;
	}

	public int getPay() {
		return pay;
	}

	public void setPay(int pay) {
		this.pay = pay;
	}
	
	
}

Main.java

package kosta.oop2;

public class Main {

	public static void main(String[] args) {
		Salary s = new Salary("홍길동", 26, "경찰관", 300);
		
		s.print(); // person 클래스 안에 있는 메소드
		System.out.println("===================");
		s.raisePay(50);// 월급 인상
		//s.downPay(30);// 월급 삭감
		s.show(); // salary 클래스 안에 있는 메소드
	}
}




🎲 기존 Account 예제를 통해 메소드 오버라이딩을 이용해 마이너스통장 구현하기

Account.java - 기존 예제
MinusAccount.java - 마이너스통장 관련 필드, 메소드 구현 (Account의 withdraw()메소드를 오버라이딩)

📃 풀이

MinusAccount.java


package kosta.oop2;

public class MinusAccount extends Account {
	private int creditLine; //마이너스 한도
	
	public MinusAccount() {
		
	}

	public MinusAccount(String accountNo, String ownerName, int balance, int creditLine) {
		super(accountNo, ownerName, balance);
		this.creditLine = creditLine;
	}

	//Account 에 있는 withdraw 메소드는 적합 하지 않아
	//MinusAccount 클래스에서 재정의
	//=> 메소드 오버라이딩 : 부모의 메소드의 시그니쳐 일치(리턴형, 메소드이름, 파라미터(갯수, 데이터형), 예외관련)
	@Override
	public int withdraw(int amount) throws Exception {
		if(getBalance() + creditLine < amount) {
			throw new Exception("잔액 부족");
		}
		
		int balance = getBalance();
		setBalance(balance - amount);
		
		return amount;
	}
	
	
}


MinusMain.java

package kosta.oop2;

public class MinusMain {

	public static void main(String[] args) {
		MinusAccount ma = new MinusAccount("111-111","박길동",5000,10000);
		
		try {
			ma.withdraw(12000);
		} catch (Exception e) {
			e.printStackTrace();
		}
		ma.print();
	}

}

profile
DB 엔지니어👍

0개의 댓글