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.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();
}
}