Inheritance: 다른 클래스로부터 상속을 받아서, 그 클래스에 있는 모든 Implementation을 그대로 사용할 수 있게 된다. 이 때 중요한 것은, 상속을 받을 수 있고, 또 함께 원하지 않는 것을 수정할 수도 있음. (메소드를 내가 원하는 메소드로 치환할 수 있음)
같은 이름, 파라미터로 선언하면 method override라고 한다.
@Override 이렇게 쓰면, 이 메소드는 super class에서 정의된 메소드를 다시 Implementation 하는 것. => 컴파일러가 확인함.
public class CommissionEmployee
{
private String firstName;
private String lastName;
private String socialSecurityNumber;
private double grossSales;
private double commissionRate;
public CommissionEmployee( String first, String last, String ssn, double sales, double rate)
{
firstName = first;
lastName = last;
socialSecurityNumber = ssn;
setGrossSales( sales );
setCommissionRate( rate );
}
public void setSoicalSecurityNumber( String ssn )
{
socialSecurityNumber = ssn;
}
public String getSocialSecurityNumber()
{
return socialSecurityNumber;
}
public void setGrossSales( double sales )
{
grossSales = ( sales < 0.0 ) ? 0.0: sales;
}
public double getGrossSales()
{
return grossSales;
}
public void setCommissionRate( double rate )
{
commissionRate = (rate > 0.0 && rate < 1.0 ) ? rate: 0.0;
}
public double getCommissionRate()
{
return commissionRate;
}
public double earnings()
return getCommissionRate() * getGrossSales();
}
@Override
public String toString()
{
return String.format("%s: %s %s \n%s: %s\n%s: %.2f\n%s: %.2f",
"commission employee", getFirstName(), getLastName(),
"social security number", getSocialSecurityNumber(),
"gross sales", getGrossSales(),
"commission rate", getCommissionRate());
}
//메소드안에서 직접 instance 변수들을 부르는게 아니라, 따로 메소드를 이용해 가져오는 방식을 이용하자!(감추자)
}
public class BasePlusComissionEmployee extends CommissionEmployee
//class BasePlusComissionEmployee 가 CommissionEmployee에 상속된다는 의미
{
private double baseSalary;
public BasePlusCommissionEmployee (String first, String last, String ssn, double sales,
double rate, double salary)
{
super( first, last, ssn, sales, rate);
//CommissionEmployee 생성자에 들어가는 듯..
setBaseSalary( salary);
}
public void setBaseSalary( double salary )
{
baseSalary = ( salary < 0.0 ) ? 0.0 : salary;
}
public double getBaseSalary()
{
return baseSalary;
}
@Override
public double earnings()
{
return getBaseSalary() + super.earnings();
//CommissionEmployee에 있는 earnings() 실행
}
@Override
public String toString()
{
return String.format( "%s %s\n%s: %.2f, "base-salaried", super.toString(),
"base salary", getBaseSalary() );
}
}